//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_spi(SotoInternal) import SotoCore

extension WorkSpaces {
    // MARK: Enums

    public enum AGAModeForDirectoryEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabledAuto = "ENABLED_AUTO"
        public var description: String { return self.rawValue }
    }

    public enum AGAModeForWorkSpaceEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabledAuto = "ENABLED_AUTO"
        case inherited = "INHERITED"
        public var description: String { return self.rawValue }
    }

    public enum AGAPreferredProtocolForDirectory: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case none = "NONE"
        case tcp = "TCP"
        public var description: String { return self.rawValue }
    }

    public enum AGAPreferredProtocolForWorkSpace: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case inherited = "INHERITED"
        case none = "NONE"
        case tcp = "TCP"
        public var description: String { return self.rawValue }
    }

    public enum AccessEndpointType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case streamingWsp = "STREAMING_WSP"
        public var description: String { return self.rawValue }
    }

    public enum AccessPropertyValue: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case allow = "ALLOW"
        case deny = "DENY"
        public var description: String { return self.rawValue }
    }

    public enum AccountLinkStatusEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case linkNotFound = "LINK_NOT_FOUND"
        case linked = "LINKED"
        case linkingFailed = "LINKING_FAILED"
        case pendingAcceptanceByTargetAccount = "PENDING_ACCEPTANCE_BY_TARGET_ACCOUNT"
        case rejected = "REJECTED"
        public var description: String { return self.rawValue }
    }

    public enum Application: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case microsoftOffice2016 = "Microsoft_Office_2016"
        case microsoftOffice2019 = "Microsoft_Office_2019"
        public var description: String { return self.rawValue }
    }

    public enum ApplicationAssociatedResourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case bundle = "BUNDLE"
        case image = "IMAGE"
        case workspace = "WORKSPACE"
        public var description: String { return self.rawValue }
    }

    public enum ApplicationSettingsStatusEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum AssociationErrorCode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case insufficientDiskspace = "ValidationError.InsufficientDiskSpace"
        case insufficientMemory = "ValidationError.InsufficientMemory"
        case internalServerError = "DeploymentError.InternalServerError"
        case unsupportedOperatingSystem = "ValidationError.UnsupportedOperatingSystem"
        case workspaceUnreachable = "DeploymentError.WorkspaceUnreachable"
        public var description: String { return self.rawValue }
    }

    public enum AssociationState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case completed = "COMPLETED"
        case error = "ERROR"
        case installing = "INSTALLING"
        case pendingInstall = "PENDING_INSTALL"
        case pendingInstallDeployment = "PENDING_INSTALL_DEPLOYMENT"
        case pendingUninstall = "PENDING_UNINSTALL"
        case pendingUninstallDeployment = "PENDING_UNINSTALL_DEPLOYMENT"
        case removed = "REMOVED"
        case uninstalling = "UNINSTALLING"
        public var description: String { return self.rawValue }
    }

    public enum AssociationStatus: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case associatedWithOwnerAccount = "ASSOCIATED_WITH_OWNER_ACCOUNT"
        case associatedWithSharedAccount = "ASSOCIATED_WITH_SHARED_ACCOUNT"
        case notAssociated = "NOT_ASSOCIATED"
        case pendingAssociation = "PENDING_ASSOCIATION"
        case pendingDisassociation = "PENDING_DISASSOCIATION"
        public var description: String { return self.rawValue }
    }

    public enum AuthenticationType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case saml = "SAML"
        public var description: String { return self.rawValue }
    }

    public enum BundleAssociatedResourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case application = "APPLICATION"
        public var description: String { return self.rawValue }
    }

    public enum BundleType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case regular = "REGULAR"
        case standby = "STANDBY"
        public var description: String { return self.rawValue }
    }

    public enum CertificateBasedAuthStatusEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum ClientDeviceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deviceTypeAndroid = "DeviceTypeAndroid"
        case deviceTypeIos = "DeviceTypeIos"
        case deviceTypeLinux = "DeviceTypeLinux"
        case deviceTypeOsx = "DeviceTypeOsx"
        case deviceTypeWeb = "DeviceTypeWeb"
        case deviceTypeWindows = "DeviceTypeWindows"
        public var description: String { return self.rawValue }
    }

    public enum Compute: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case generalpurpose4Xlarge = "GENERALPURPOSE_4XLARGE"
        case generalpurpose8Xlarge = "GENERALPURPOSE_8XLARGE"
        case graphics = "GRAPHICS"
        case graphicsG4Dn = "GRAPHICS_G4DN"
        case graphicspro = "GRAPHICSPRO"
        case graphicsproG4Dn = "GRAPHICSPRO_G4DN"
        case performance = "PERFORMANCE"
        case power = "POWER"
        case powerpro = "POWERPRO"
        case standard = "STANDARD"
        case value = "VALUE"
        public var description: String { return self.rawValue }
    }

    public enum ConnectionAliasState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case created = "CREATED"
        case creating = "CREATING"
        case deleting = "DELETING"
        public var description: String { return self.rawValue }
    }

    public enum ConnectionState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case connected = "CONNECTED"
        case disconnected = "DISCONNECTED"
        case unknown = "UNKNOWN"
        public var description: String { return self.rawValue }
    }

    public enum CustomImageProtocol: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case byop = "BYOP"
        case dcv = "DCV"
        case pcoip = "PCOIP"
        public var description: String { return self.rawValue }
    }

    public enum CustomWorkspaceImageImportState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case completed = "COMPLETED"
        case error = "ERROR"
        case inProgress = "IN_PROGRESS"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum DataReplication: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case noReplication = "NO_REPLICATION"
        case primaryAsSource = "PRIMARY_AS_SOURCE"
        public var description: String { return self.rawValue }
    }

    public enum DedicatedTenancyAccountType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case sourceAccount = "SOURCE_ACCOUNT"
        case targetAccount = "TARGET_ACCOUNT"
        public var description: String { return self.rawValue }
    }

    public enum DedicatedTenancyModificationStateEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case completed = "COMPLETED"
        case failed = "FAILED"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum DedicatedTenancySupportEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum DedicatedTenancySupportResultEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum DeletableCertificateBasedAuthProperty: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case certificateBasedAuthPropertiesCertificateAuthorityArn = "CERTIFICATE_BASED_AUTH_PROPERTIES_CERTIFICATE_AUTHORITY_ARN"
        public var description: String { return self.rawValue }
    }

    public enum DeletableSamlProperty: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case samlPropertiesRelayStateParameterName = "SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME"
        case samlPropertiesUserAccessUrl = "SAML_PROPERTIES_USER_ACCESS_URL"
        public var description: String { return self.rawValue }
    }

    public enum DescribeWorkspaceDirectoriesFilterName: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case userIdentityType = "USER_IDENTITY_TYPE"
        case workspaceType = "WORKSPACE_TYPE"
        public var description: String { return self.rawValue }
    }

    public enum DescribeWorkspacesPoolsFilterName: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case poolname = "PoolName"
        public var description: String { return self.rawValue }
    }

    public enum DescribeWorkspacesPoolsFilterOperator: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case contains = "CONTAINS"
        case equals = "EQUALS"
        case notcontains = "NOTCONTAINS"
        case notequals = "NOTEQUALS"
        public var description: String { return self.rawValue }
    }

    public enum EndpointEncryptionMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case fipsValidated = "FIPS_VALIDATED"
        case standardTls = "STANDARD_TLS"
        public var description: String { return self.rawValue }
    }

    public enum ImageAssociatedResourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case application = "APPLICATION"
        public var description: String { return self.rawValue }
    }

    public enum ImageComputeType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case base = "BASE"
        case graphicsG4Dn = "GRAPHICS_G4DN"
        public var description: String { return self.rawValue }
    }

    public enum ImageType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case owned = "OWNED"
        case shared = "SHARED"
        public var description: String { return self.rawValue }
    }

    public enum InternetFallbackProtocol: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case pcoip = "PCOIP"
        public var description: String { return self.rawValue }
    }

    public enum LogUploadEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum ModificationResourceEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case computeType = "COMPUTE_TYPE"
        case rootVolume = "ROOT_VOLUME"
        case userVolume = "USER_VOLUME"
        public var description: String { return self.rawValue }
    }

    public enum ModificationStateEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case updateInProgress = "UPDATE_IN_PROGRESS"
        case updateInitiated = "UPDATE_INITIATED"
        public var description: String { return self.rawValue }
    }

    public enum OSVersion: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case windows10 = "Windows_10"
        case windows11 = "Windows_11"
        public var description: String { return self.rawValue }
    }

    public enum OperatingSystemName: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case amazonLinux2 = "AMAZON_LINUX_2"
        case rhel8 = "RHEL_8"
        case rocky8 = "ROCKY_8"
        case ubuntu1804 = "UBUNTU_18_04"
        case ubuntu2004 = "UBUNTU_20_04"
        case ubuntu2204 = "UBUNTU_22_04"
        case unknown = "UNKNOWN"
        case windows10 = "WINDOWS_10"
        case windows11 = "WINDOWS_11"
        case windows7 = "WINDOWS_7"
        case windowsServer2016 = "WINDOWS_SERVER_2016"
        case windowsServer2019 = "WINDOWS_SERVER_2019"
        case windowsServer2022 = "WINDOWS_SERVER_2022"
        public var description: String { return self.rawValue }
    }

    public enum OperatingSystemType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case linux = "LINUX"
        case windows = "WINDOWS"
        public var description: String { return self.rawValue }
    }

    public enum Platform: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case windows = "WINDOWS"
        public var description: String { return self.rawValue }
    }

    public enum PoolsRunningMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case alwaysOn = "ALWAYS_ON"
        case autoStop = "AUTO_STOP"
        public var description: String { return self.rawValue }
    }

    public enum ReconnectEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum RunningMode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case alwaysOn = "ALWAYS_ON"
        case autoStop = "AUTO_STOP"
        case manual = "MANUAL"
        public var description: String { return self.rawValue }
    }

    public enum SamlStatusEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        case enabledWithDirectoryLoginFallback = "ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK"
        public var description: String { return self.rawValue }
    }

    public enum SessionConnectionState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case connected = "CONNECTED"
        case notConnected = "NOT_CONNECTED"
        public var description: String { return self.rawValue }
    }

    public enum StandbyWorkspaceRelationshipType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case primary = "PRIMARY"
        case standby = "STANDBY"
        public var description: String { return self.rawValue }
    }

    public enum StorageConnectorStatusEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum StorageConnectorTypeEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case homeFolder = "HOME_FOLDER"
        public var description: String { return self.rawValue }
    }

    public enum StreamingExperiencePreferredProtocolEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case tcp = "TCP"
        case udp = "UDP"
        public var description: String { return self.rawValue }
    }

    public enum TargetWorkspaceState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case adminMaintenance = "ADMIN_MAINTENANCE"
        case available = "AVAILABLE"
        public var description: String { return self.rawValue }
    }

    public enum Tenancy: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case dedicated = "DEDICATED"
        case shared = "SHARED"
        public var description: String { return self.rawValue }
    }

    public enum UserIdentityType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case awsDirectoryService = "AWS_DIRECTORY_SERVICE"
        case awsIamIdentityCenter = "AWS_IAM_IDENTITY_CENTER"
        case customerManaged = "CUSTOMER_MANAGED"
        public var description: String { return self.rawValue }
    }

    public enum UserSettingActionEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case clipboardCopyFromLocalDevice = "CLIPBOARD_COPY_FROM_LOCAL_DEVICE"
        case clipboardCopyToLocalDevice = "CLIPBOARD_COPY_TO_LOCAL_DEVICE"
        case printingToLocalDevice = "PRINTING_TO_LOCAL_DEVICE"
        case smartCard = "SMART_CARD"
        public var description: String { return self.rawValue }
    }

    public enum UserSettingPermissionEnum: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case disabled = "DISABLED"
        case enabled = "ENABLED"
        public var description: String { return self.rawValue }
    }

    public enum WorkSpaceApplicationLicenseType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case licensed = "LICENSED"
        case unlicensed = "UNLICENSED"
        public var description: String { return self.rawValue }
    }

    public enum WorkSpaceApplicationState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case available = "AVAILABLE"
        case error = "ERROR"
        case pending = "PENDING"
        case uninstallOnly = "UNINSTALL_ONLY"
        public var description: String { return self.rawValue }
    }

    public enum WorkSpaceAssociatedResourceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case application = "APPLICATION"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceBundleState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case available = "AVAILABLE"
        case error = "ERROR"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceDirectoryState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case deregistered = "DEREGISTERED"
        case deregistering = "DEREGISTERING"
        case error = "ERROR"
        case registered = "REGISTERED"
        case registering = "REGISTERING"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceDirectoryType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case adConnector = "AD_CONNECTOR"
        case awsIamIdentityCenter = "AWS_IAM_IDENTITY_CENTER"
        case customerManaged = "CUSTOMER_MANAGED"
        case simpleAd = "SIMPLE_AD"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceImageErrorDetailCode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case additionalDrivesAttached = "AdditionalDrivesAttached"
        case additionalDrivesPresent = "AdditionalDrivesPresent"
        case amazonSsmAgentEnabled = "AmazonSsmAgentEnabled"
        case antiVirusInstalled = "AntiVirusInstalled"
        case appxPackagesInstalled = "AppXPackagesInstalled"
        case autoLogonEnabled = "AutoLogonEnabled"
        case autoMountDisabled = "AutoMountDisabled"
        case azureDomainJoined = "AzureDomainJoined"
        case dhcpDisabled = "DHCPDisabled"
        case diskFreeSpace = "DiskFreeSpace"
        case diskSizeExceeded = "DiskSizeExceeded"
        case domainAccountServicesFound = "DomainAccountServicesFound"
        case domainJoined = "DomainJoined"
        case environmentVariablesPathMissingEntries = "EnvironmentVariablesPathMissingEntries"
        case firewallEnabled = "FirewallEnabled"
        case inPlaceUpgrade = "InPlaceUpgrade"
        case incompatibleMemoryIntegrity = "MemoryIntegrityIncompatibility"
        case incompatiblePartitioning = "IncompatiblePartitioning"
        case incompatibleProtocol = "ProtocolOSIncompatibility"
        case insufficientDiskSpace = "InsufficientDiskSpace"
        case insufficientRearmCount = "InsufficientRearmCount"
        case invalidIp = "InvalidIp"
        case multipleBootPartition = "MultipleBootPartition"
        case multipleUserProfiles = "MultipleUserProfiles"
        case officeInstalled = "OfficeInstalled"
        case osNotSupported = "OSNotSupported"
        case outdatedPowershellVersion = "OutdatedPowershellVersion"
        case pcoipAgentInstalled = "PCoIPAgentInstalled"
        case pendingReboot = "PendingReboot"
        case realtimeUniversalDisabled = "RealTimeUniversalDisabled"
        case remoteDesktopServicesDisabled = "RemoteDesktopServicesDisabled"
        case reservedStorageInUse = "ReservedStorageInUse"
        case restrictedDriveLetter = "RestrictedDriveLetterInUse"
        case sixtyFourBitOs = "Requires64BitOS"
        case stagedAppxPackage = "StagedAppxPackage"
        case sysprepFileMissing = "SysPrepFileMissing"
        case uefiNotSupported = "UEFINotSupported"
        case unknownError = "UnknownError"
        case unsupportedOsUpgrade = "UnsupportedOsUpgrade"
        case unsupportedSecurityProtocol = "UnsupportedSecurityProtocol"
        case userProfileMissing = "UserProfileMissing"
        case vmwareToolsInstalled = "VMWareToolsInstalled"
        case windowsModulesInstallerDisabled = "WindowsModulesInstallerDisabled"
        case windowsUpdatesEnabled = "WindowsUpdatesEnabled"
        case windowsUpdatesRequired = "WindowsUpdatesRequired"
        case workspacesByolAccountDisabled = "WorkspacesBYOLAccountDisabled"
        case workspacesByolAccountNotFound = "WorkspacesBYOLAccountNotFound"
        case zeroRearmCount = "ZeroRearmCount"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceImageIngestionProcess: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case byolGraphics = "BYOL_GRAPHICS"
        case byolGraphicsG4Dn = "BYOL_GRAPHICS_G4DN"
        case byolGraphicsG4DnByop = "BYOL_GRAPHICS_G4DN_BYOP"
        case byolGraphicsG4DnWsp = "BYOL_GRAPHICS_G4DN_WSP"
        case byolGraphicspro = "BYOL_GRAPHICSPRO"
        case byolRegular = "BYOL_REGULAR"
        case byolRegularByop = "BYOL_REGULAR_BYOP"
        case byolRegularWsp = "BYOL_REGULAR_WSP"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceImageRequiredTenancy: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case `default` = "DEFAULT"
        case dedicated = "DEDICATED"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceImageState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case available = "AVAILABLE"
        case error = "ERROR"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case adminMaintenance = "ADMIN_MAINTENANCE"
        case available = "AVAILABLE"
        case error = "ERROR"
        case impaired = "IMPAIRED"
        case maintenance = "MAINTENANCE"
        case pending = "PENDING"
        case rebooting = "REBOOTING"
        case rebuilding = "REBUILDING"
        case restoring = "RESTORING"
        case starting = "STARTING"
        case stopped = "STOPPED"
        case stopping = "STOPPING"
        case suspended = "SUSPENDED"
        case terminated = "TERMINATED"
        case terminating = "TERMINATING"
        case unhealthy = "UNHEALTHY"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum WorkspaceType: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case personal = "PERSONAL"
        case pools = "POOLS"
        public var description: String { return self.rawValue }
    }

    public enum WorkspacesPoolErrorCode: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case bundleNotFound = "BUNDLE_NOT_FOUND"
        case defaultOuIsMissing = "DEFAULT_OU_IS_MISSING"
        case directoryNotFound = "DIRECTORY_NOT_FOUND"
        case domainJoinErrorAccessDenied = "DOMAIN_JOIN_ERROR_ACCESS_DENIED"
        case domainJoinErrorDsMachineAccountQuotaExceeded = "DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED"
        case domainJoinErrorFileNotFound = "DOMAIN_JOIN_ERROR_FILE_NOT_FOUND"
        case domainJoinErrorInvalidParameter = "DOMAIN_JOIN_ERROR_INVALID_PARAMETER"
        case domainJoinErrorLogonFailure = "DOMAIN_JOIN_ERROR_LOGON_FAILURE"
        case domainJoinErrorMoreData = "DOMAIN_JOIN_ERROR_MORE_DATA"
        case domainJoinErrorNoSuchDomain = "DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN"
        case domainJoinErrorNotSupported = "DOMAIN_JOIN_ERROR_NOT_SUPPORTED"
        case domainJoinErrorSecretActionPermissionIsMissing = "DOMAIN_JOIN_ERROR_SECRET_ACTION_PERMISSION_IS_MISSING"
        case domainJoinErrorSecretDecryptionFailure = "DOMAIN_JOIN_ERROR_SECRET_DECRYPTION_FAILURE"
        case domainJoinErrorSecretInvalid = "DOMAIN_JOIN_ERROR_SECRET_INVALID"
        case domainJoinErrorSecretNotFound = "DOMAIN_JOIN_ERROR_SECRET_NOT_FOUND"
        case domainJoinErrorSecretStateInvalid = "DOMAIN_JOIN_ERROR_SECRET_STATE_INVALID"
        case domainJoinErrorSecretValueKeyNotFound = "DOMAIN_JOIN_ERROR_SECRET_VALUE_KEY_NOT_FOUND"
        case domainJoinInternalServiceError = "DOMAIN_JOIN_INTERNAL_SERVICE_ERROR"
        case domainJoinNerrInvalidWorkgroupName = "DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME"
        case domainJoinNerrPasswordExpired = "DOMAIN_JOIN_NERR_PASSWORD_EXPIRED"
        case domainJoinNerrWorkstationNotStarted = "DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED"
        case iamServiceRoleIsMissing = "IAM_SERVICE_ROLE_IS_MISSING"
        case iamServiceRoleMissingDescribeSecurityGroupsAction = "IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION"
        case iamServiceRoleMissingDescribeSubnetAction = "IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION"
        case iamServiceRoleMissingEniCreateAction = "IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION"
        case iamServiceRoleMissingEniDeleteAction = "IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION"
        case iamServiceRoleMissingEniDescribeAction = "IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION"
        case igwNotAttached = "IGW_NOT_ATTACHED"
        case imageNotFound = "IMAGE_NOT_FOUND"
        case insufficientPermissionsError = "INSUFFICIENT_PERMISSIONS_ERROR"
        case internalServiceError = "INTERNAL_SERVICE_ERROR"
        case invalidSubnetConfiguration = "INVALID_SUBNET_CONFIGURATION"
        case machineRoleIsMissing = "MACHINE_ROLE_IS_MISSING"
        case networkInterfaceLimitExceeded = "NETWORK_INTERFACE_LIMIT_EXCEEDED"
        case securityGroupsNotFound = "SECURITY_GROUPS_NOT_FOUND"
        case stsDisabledInRegion = "STS_DISABLED_IN_REGION"
        case subnetHasInsufficientIpAddresses = "SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES"
        case subnetNotFound = "SUBNET_NOT_FOUND"
        case workspacesPoolInstanceProvisioningFailure = "WORKSPACES_POOL_INSTANCE_PROVISIONING_FAILURE"
        case workspacesPoolStopped = "WORKSPACES_POOL_STOPPED"
        public var description: String { return self.rawValue }
    }

    public enum WorkspacesPoolState: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case creating = "CREATING"
        case deleting = "DELETING"
        case running = "RUNNING"
        case starting = "STARTING"
        case stopped = "STOPPED"
        case stopping = "STOPPING"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum `Protocol`: String, CustomStringConvertible, Codable, Sendable, CodingKeyRepresentable {
        case pcoip = "PCOIP"
        case wsp = "WSP"
        public var description: String { return self.rawValue }
    }

    public enum ImageSourceIdentifier: AWSEncodableShape & AWSDecodableShape, Sendable {
        /// The identifier of the EC2 image.
        case ec2ImageId(String)
        /// The EC2 import task ID to import the image from the Amazon EC2 VM import process.
        case ec2ImportTaskId(String)
        /// The ARN of the EC2 Image Builder image.
        case imageBuildVersionArn(String)

        public init(from decoder: Decoder) throws {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            guard container.allKeys.count == 1, let key = container.allKeys.first else {
                let context = DecodingError.Context(
                    codingPath: container.codingPath,
                    debugDescription: "Expected exactly one key, but got \(container.allKeys.count)"
                )
                throw DecodingError.dataCorrupted(context)
            }
            switch key {
            case .ec2ImageId:
                let value = try container.decode(String.self, forKey: .ec2ImageId)
                self = .ec2ImageId(value)
            case .ec2ImportTaskId:
                let value = try container.decode(String.self, forKey: .ec2ImportTaskId)
                self = .ec2ImportTaskId(value)
            case .imageBuildVersionArn:
                let value = try container.decode(String.self, forKey: .imageBuildVersionArn)
                self = .imageBuildVersionArn(value)
            }
        }

        public func encode(to encoder: Encoder) throws {
            var container = encoder.container(keyedBy: CodingKeys.self)
            switch self {
            case .ec2ImageId(let value):
                try container.encode(value, forKey: .ec2ImageId)
            case .ec2ImportTaskId(let value):
                try container.encode(value, forKey: .ec2ImportTaskId)
            case .imageBuildVersionArn(let value):
                try container.encode(value, forKey: .imageBuildVersionArn)
            }
        }

        public func validate(name: String) throws {
            switch self {
            case .ec2ImageId(let value):
                try self.validate(value, name: "ec2ImageId", parent: name, pattern: "^ami\\-([a-f0-9]{8}|[a-f0-9]{17})$")
            case .ec2ImportTaskId(let value):
                try self.validate(value, name: "ec2ImportTaskId", parent: name, max: 28)
                try self.validate(value, name: "ec2ImportTaskId", parent: name, min: 19)
                try self.validate(value, name: "ec2ImportTaskId", parent: name, pattern: "^import-ami\\-([a-zA-Z0-9]{8}|[a-zA-Z0-9]{17})$")
            case .imageBuildVersionArn(let value):
                try self.validate(value, name: "imageBuildVersionArn", parent: name, max: 2048)
                try self.validate(value, name: "imageBuildVersionArn", parent: name, min: 1)
                try self.validate(value, name: "imageBuildVersionArn", parent: name, pattern: "^arn:aws[^:]*:imagebuilder:[^:]+:(?:[0-9]{12}|aws(?:-[a-z-]+)?):image/[a-z0-9-_]+/(?:(?:([0-9]+|x)\\.([0-9]+|x)\\.([0-9]+|x))|(?:[0-9]+\\.[0-9]+\\.[0-9]+/[0-9]+))$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case ec2ImageId = "Ec2ImageId"
            case ec2ImportTaskId = "Ec2ImportTaskId"
            case imageBuildVersionArn = "ImageBuildVersionArn"
        }
    }

    // MARK: Shapes

    public struct AcceptAccountLinkInvitationRequest: AWSEncodableShape {
        /// A string of up to 64 ASCII characters that Amazon WorkSpaces uses to ensure idempotent creation.
        public let clientToken: String?
        /// The identifier of the account link.
        public let linkId: String

        @inlinable
        public init(clientToken: String? = nil, linkId: String) {
            self.clientToken = clientToken
            self.linkId = linkId
        }

        public func validate(name: String) throws {
            try self.validate(self.clientToken, name: "clientToken", parent: name, pattern: "^.{1,64}$")
            try self.validate(self.linkId, name: "linkId", parent: name, pattern: "^link-.{8,24}$")
        }

        private enum CodingKeys: String, CodingKey {
            case clientToken = "ClientToken"
            case linkId = "LinkId"
        }
    }

    public struct AcceptAccountLinkInvitationResult: AWSDecodableShape {
        /// Information about the account link.
        public let accountLink: AccountLink?

        @inlinable
        public init(accountLink: AccountLink? = nil) {
            self.accountLink = accountLink
        }

        private enum CodingKeys: String, CodingKey {
            case accountLink = "AccountLink"
        }
    }

    public struct AccessEndpoint: AWSEncodableShape & AWSDecodableShape {
        /// Indicates the type of access endpoint.
        public let accessEndpointType: AccessEndpointType?
        /// Indicates the VPC endpoint to use for access.
        public let vpcEndpointId: String?

        @inlinable
        public init(accessEndpointType: AccessEndpointType? = nil, vpcEndpointId: String? = nil) {
            self.accessEndpointType = accessEndpointType
            self.vpcEndpointId = vpcEndpointId
        }

        public func validate(name: String) throws {
            try self.validate(self.vpcEndpointId, name: "vpcEndpointId", parent: name, pattern: "^[a-zA-Z0-9\\_\\-]{1,1000}$")
        }

        private enum CodingKeys: String, CodingKey {
            case accessEndpointType = "AccessEndpointType"
            case vpcEndpointId = "VpcEndpointId"
        }
    }

    public struct AccessEndpointConfig: AWSEncodableShape & AWSDecodableShape {
        /// Indicates a list of access endpoints associated with this directory.
        public let accessEndpoints: [AccessEndpoint]
        /// Indicates a list of protocols that fallback to using the public Internet when streaming over a VPC endpoint is not available.
        public let internetFallbackProtocols: [InternetFallbackProtocol]?

        @inlinable
        public init(accessEndpoints: [AccessEndpoint], internetFallbackProtocols: [InternetFallbackProtocol]? = nil) {
            self.accessEndpoints = accessEndpoints
            self.internetFallbackProtocols = internetFallbackProtocols
        }

        public func validate(name: String) throws {
            try self.accessEndpoints.forEach {
                try $0.validate(name: "\(name).accessEndpoints[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case accessEndpoints = "AccessEndpoints"
            case internetFallbackProtocols = "InternetFallbackProtocols"
        }
    }

    public struct AccountLink: AWSDecodableShape {
        /// The identifier of the account link.
        public let accountLinkId: String?
        /// The status of the account link.
        public let accountLinkStatus: AccountLinkStatusEnum?
        /// The identifier of the source account.
        public let sourceAccountId: String?
        /// The identifier of the target account.
        public let targetAccountId: String?

        @inlinable
        public init(accountLinkId: String? = nil, accountLinkStatus: AccountLinkStatusEnum? = nil, sourceAccountId: String? = nil, targetAccountId: String? = nil) {
            self.accountLinkId = accountLinkId
            self.accountLinkStatus = accountLinkStatus
            self.sourceAccountId = sourceAccountId
            self.targetAccountId = targetAccountId
        }

        private enum CodingKeys: String, CodingKey {
            case accountLinkId = "AccountLinkId"
            case accountLinkStatus = "AccountLinkStatus"
            case sourceAccountId = "SourceAccountId"
            case targetAccountId = "TargetAccountId"
        }
    }

    public struct AccountModification: AWSDecodableShape {
        /// The IP address range, specified as an IPv4 CIDR block, for the management network interface used for the account.
        public let dedicatedTenancyManagementCidrRange: String?
        /// The status of BYOL (whether BYOL is being enabled or disabled).
        public let dedicatedTenancySupport: DedicatedTenancySupportResultEnum?
        /// The error code that is returned if the configuration of BYOL cannot be modified.
        public let errorCode: String?
        /// The text of the error message that is returned if the configuration of BYOL cannot be modified.
        public let errorMessage: String?
        /// The state of the modification to the configuration of BYOL.
        public let modificationState: DedicatedTenancyModificationStateEnum?
        /// The timestamp when the modification of the BYOL configuration was started.
        public let startTime: Date?

        @inlinable
        public init(dedicatedTenancyManagementCidrRange: String? = nil, dedicatedTenancySupport: DedicatedTenancySupportResultEnum? = nil, errorCode: String? = nil, errorMessage: String? = nil, modificationState: DedicatedTenancyModificationStateEnum? = nil, startTime: Date? = nil) {
            self.dedicatedTenancyManagementCidrRange = dedicatedTenancyManagementCidrRange
            self.dedicatedTenancySupport = dedicatedTenancySupport
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.modificationState = modificationState
            self.startTime = startTime
        }

        private enum CodingKeys: String, CodingKey {
            case dedicatedTenancyManagementCidrRange = "DedicatedTenancyManagementCidrRange"
            case dedicatedTenancySupport = "DedicatedTenancySupport"
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case modificationState = "ModificationState"
            case startTime = "StartTime"
        }
    }

    public struct ActiveDirectoryConfig: AWSEncodableShape & AWSDecodableShape {
        /// The name of the domain.
        public let domainName: String
        /// Indicates the secret ARN on the service account.
        public let serviceAccountSecretArn: String

        @inlinable
        public init(domainName: String, serviceAccountSecretArn: String) {
            self.domainName = domainName
            self.serviceAccountSecretArn = serviceAccountSecretArn
        }

        public func validate(name: String) throws {
            try self.validate(self.domainName, name: "domainName", parent: name, pattern: "^([a-zA-Z0-9]+[.-])+([a-zA-Z0-9])+$")
            try self.validate(self.serviceAccountSecretArn, name: "serviceAccountSecretArn", parent: name, pattern: "^arn:aws[a-z-]{0,7}:secretsmanager:[A-za-z0-9_/.-]{0,63}:[A-za-z0-9_/.-]{0,63}:secret:[A-Za-z0-9][A-za-z0-9_/.-]{8,519}$")
        }

        private enum CodingKeys: String, CodingKey {
            case domainName = "DomainName"
            case serviceAccountSecretArn = "ServiceAccountSecretArn"
        }
    }

    public struct ApplicationResourceAssociation: AWSDecodableShape {
        /// The identifier of the application.
        public let applicationId: String?
        /// The identifier of the associated resource.
        public let associatedResourceId: String?
        /// The resource type of the associated resource.
        public let associatedResourceType: ApplicationAssociatedResourceType?
        /// The time the association was created.
        public let created: Date?
        /// The time the association status was last updated.
        public let lastUpdatedTime: Date?
        /// The status of the application resource association.
        public let state: AssociationState?
        /// The reason the association deployment failed.
        public let stateReason: AssociationStateReason?

        @inlinable
        public init(applicationId: String? = nil, associatedResourceId: String? = nil, associatedResourceType: ApplicationAssociatedResourceType? = nil, created: Date? = nil, lastUpdatedTime: Date? = nil, state: AssociationState? = nil, stateReason: AssociationStateReason? = nil) {
            self.applicationId = applicationId
            self.associatedResourceId = associatedResourceId
            self.associatedResourceType = associatedResourceType
            self.created = created
            self.lastUpdatedTime = lastUpdatedTime
            self.state = state
            self.stateReason = stateReason
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case associatedResourceId = "AssociatedResourceId"
            case associatedResourceType = "AssociatedResourceType"
            case created = "Created"
            case lastUpdatedTime = "LastUpdatedTime"
            case state = "State"
            case stateReason = "StateReason"
        }
    }

    public struct ApplicationSettingsRequest: AWSEncodableShape {
        /// The path prefix for the S3 bucket where users’ persistent application settings are stored.  You can allow the same persistent application settings to be used across multiple pools by specifying  the same settings group for each pool.
        public let settingsGroup: String?
        /// Enables or disables persistent application settings for users during their pool sessions.
        public let status: ApplicationSettingsStatusEnum

        @inlinable
        public init(settingsGroup: String? = nil, status: ApplicationSettingsStatusEnum) {
            self.settingsGroup = settingsGroup
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.settingsGroup, name: "settingsGroup", parent: name, max: 100)
            try self.validate(self.settingsGroup, name: "settingsGroup", parent: name, pattern: "^[A-Za-z0-9_./()!*'-]+$")
        }

        private enum CodingKeys: String, CodingKey {
            case settingsGroup = "SettingsGroup"
            case status = "Status"
        }
    }

    public struct ApplicationSettingsResponse: AWSDecodableShape {
        /// The S3 bucket where users’ persistent application settings are stored. When persistent  application settings are enabled for the first time for an account in an Amazon Web Services Region,  an S3 bucket is created. The bucket is unique to the Amazon Web Services account and the Region.
        public let s3BucketName: String?
        /// The path prefix for the S3 bucket where users’ persistent application settings are stored.
        public let settingsGroup: String?
        /// Specifies whether persistent application settings are enabled for users during their pool sessions.
        public let status: ApplicationSettingsStatusEnum

        @inlinable
        public init(s3BucketName: String? = nil, settingsGroup: String? = nil, status: ApplicationSettingsStatusEnum) {
            self.s3BucketName = s3BucketName
            self.settingsGroup = settingsGroup
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case s3BucketName = "S3BucketName"
            case settingsGroup = "SettingsGroup"
            case status = "Status"
        }
    }

    public struct AssociateConnectionAliasRequest: AWSEncodableShape {
        /// The identifier of the connection alias.
        public let aliasId: String
        /// The identifier of the directory to associate the connection alias with.
        public let resourceId: String

        @inlinable
        public init(aliasId: String, resourceId: String) {
            self.aliasId = aliasId
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.aliasId, name: "aliasId", parent: name, max: 68)
            try self.validate(self.aliasId, name: "aliasId", parent: name, min: 13)
            try self.validate(self.aliasId, name: "aliasId", parent: name, pattern: "^wsca-[0-9a-z]{8,63}$")
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
            case resourceId = "ResourceId"
        }
    }

    public struct AssociateConnectionAliasResult: AWSDecodableShape {
        /// The identifier of the connection alias association. You use the connection identifier in the DNS TXT record when you're configuring your DNS routing policies.
        public let connectionIdentifier: String?

        @inlinable
        public init(connectionIdentifier: String? = nil) {
            self.connectionIdentifier = connectionIdentifier
        }

        private enum CodingKeys: String, CodingKey {
            case connectionIdentifier = "ConnectionIdentifier"
        }
    }

    public struct AssociateIpGroupsRequest: AWSEncodableShape {
        /// The identifier of the directory.
        public let directoryId: String
        /// The identifiers of one or more IP access control groups.
        public let groupIds: [String]

        @inlinable
        public init(directoryId: String, groupIds: [String]) {
            self.directoryId = directoryId
            self.groupIds = groupIds
        }

        public func validate(name: String) throws {
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.groupIds.forEach {
                try validate($0, name: "groupIds[]", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case directoryId = "DirectoryId"
            case groupIds = "GroupIds"
        }
    }

    public struct AssociateIpGroupsResult: AWSDecodableShape {
        public init() {}
    }

    public struct AssociateWorkspaceApplicationRequest: AWSEncodableShape {
        /// The identifier of the application.
        public let applicationId: String
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(applicationId: String, workspaceId: String) {
            self.applicationId = applicationId
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.applicationId, name: "applicationId", parent: name, pattern: "^wsa-[0-9a-z]{8,63}$")
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct AssociateWorkspaceApplicationResult: AWSDecodableShape {
        /// Information about the association between the specified WorkSpace and the specified application.
        public let association: WorkspaceResourceAssociation?

        @inlinable
        public init(association: WorkspaceResourceAssociation? = nil) {
            self.association = association
        }

        private enum CodingKeys: String, CodingKey {
            case association = "Association"
        }
    }

    public struct AssociationStateReason: AWSDecodableShape {
        /// The error code of the association deployment failure.
        public let errorCode: AssociationErrorCode?
        /// The error message of the association deployment failure.
        public let errorMessage: String?

        @inlinable
        public init(errorCode: AssociationErrorCode? = nil, errorMessage: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
        }
    }

    public struct AuthorizeIpRulesRequest: AWSEncodableShape {
        /// The identifier of the group.
        public let groupId: String
        /// The rules to add to the group.
        public let userRules: [IpRuleItem]

        @inlinable
        public init(groupId: String, userRules: [IpRuleItem]) {
            self.groupId = groupId
            self.userRules = userRules
        }

        public func validate(name: String) throws {
            try self.validate(self.groupId, name: "groupId", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case groupId = "GroupId"
            case userRules = "UserRules"
        }
    }

    public struct AuthorizeIpRulesResult: AWSDecodableShape {
        public init() {}
    }

    public struct BundleResourceAssociation: AWSDecodableShape {
        /// The identifier of the associated resource.
        public let associatedResourceId: String?
        /// The resource type of the associated resources.
        public let associatedResourceType: BundleAssociatedResourceType?
        /// The identifier of the bundle.
        public let bundleId: String?
        /// The time the association is created.
        public let created: Date?
        /// The time the association status was last updated.
        public let lastUpdatedTime: Date?
        /// The status of the bundle resource association.
        public let state: AssociationState?
        /// The reason the association deployment failed.
        public let stateReason: AssociationStateReason?

        @inlinable
        public init(associatedResourceId: String? = nil, associatedResourceType: BundleAssociatedResourceType? = nil, bundleId: String? = nil, created: Date? = nil, lastUpdatedTime: Date? = nil, state: AssociationState? = nil, stateReason: AssociationStateReason? = nil) {
            self.associatedResourceId = associatedResourceId
            self.associatedResourceType = associatedResourceType
            self.bundleId = bundleId
            self.created = created
            self.lastUpdatedTime = lastUpdatedTime
            self.state = state
            self.stateReason = stateReason
        }

        private enum CodingKeys: String, CodingKey {
            case associatedResourceId = "AssociatedResourceId"
            case associatedResourceType = "AssociatedResourceType"
            case bundleId = "BundleId"
            case created = "Created"
            case lastUpdatedTime = "LastUpdatedTime"
            case state = "State"
            case stateReason = "StateReason"
        }
    }

    public struct Capacity: AWSEncodableShape {
        /// The desired number of user sessions for the WorkSpaces in the pool.
        public let desiredUserSessions: Int

        @inlinable
        public init(desiredUserSessions: Int) {
            self.desiredUserSessions = desiredUserSessions
        }

        public func validate(name: String) throws {
            try self.validate(self.desiredUserSessions, name: "desiredUserSessions", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case desiredUserSessions = "DesiredUserSessions"
        }
    }

    public struct CapacityStatus: AWSDecodableShape {
        /// The number of user sessions currently being used for your pool.
        public let activeUserSessions: Int
        /// The total number of user sessions that are available for streaming or are currently  streaming in your pool. ActualUserSessions = AvailableUserSessions + ActiveUserSessions
        public let actualUserSessions: Int
        /// The number of user sessions currently available for streaming from your pool. AvailableUserSessions = ActualUserSessions - ActiveUserSessions
        public let availableUserSessions: Int
        /// The total number of sessions slots that are either running or pending. This  represents the total number of concurrent streaming sessions your pool can support  in a steady state.
        public let desiredUserSessions: Int

        @inlinable
        public init(activeUserSessions: Int, actualUserSessions: Int, availableUserSessions: Int, desiredUserSessions: Int) {
            self.activeUserSessions = activeUserSessions
            self.actualUserSessions = actualUserSessions
            self.availableUserSessions = availableUserSessions
            self.desiredUserSessions = desiredUserSessions
        }

        private enum CodingKeys: String, CodingKey {
            case activeUserSessions = "ActiveUserSessions"
            case actualUserSessions = "ActualUserSessions"
            case availableUserSessions = "AvailableUserSessions"
            case desiredUserSessions = "DesiredUserSessions"
        }
    }

    public struct CertificateBasedAuthProperties: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the Amazon Web Services Certificate Manager Private CA resource.
        public let certificateAuthorityArn: String?
        /// The status of the certificate-based authentication properties.
        public let status: CertificateBasedAuthStatusEnum?

        @inlinable
        public init(certificateAuthorityArn: String? = nil, status: CertificateBasedAuthStatusEnum? = nil) {
            self.certificateAuthorityArn = certificateAuthorityArn
            self.status = status
        }

        public func validate(name: String) throws {
            try self.validate(self.certificateAuthorityArn, name: "certificateAuthorityArn", parent: name, max: 200)
            try self.validate(self.certificateAuthorityArn, name: "certificateAuthorityArn", parent: name, min: 5)
            try self.validate(self.certificateAuthorityArn, name: "certificateAuthorityArn", parent: name, pattern: "^arn:[\\w+=/,.@-]+:[\\w+=/,.@-]+:[\\w+=/,.@-]*:[0-9]*:[\\w+=,.@-]+(/[\\w+=,.@-]+)*$")
        }

        private enum CodingKeys: String, CodingKey {
            case certificateAuthorityArn = "CertificateAuthorityArn"
            case status = "Status"
        }
    }

    public struct ClientProperties: AWSEncodableShape & AWSDecodableShape {
        /// Specifies whether users can upload diagnostic log files of Amazon WorkSpaces client directly to  WorkSpaces to troubleshoot issues when using the WorkSpaces client.  When enabled, the log files will be sent to WorkSpaces automatically and will be applied to all  users in the specified directory.
        public let logUploadEnabled: LogUploadEnum?
        /// Specifies whether users can cache their credentials on the Amazon WorkSpaces client. When enabled, users can choose to reconnect to their WorkSpaces without re-entering their credentials.
        public let reconnectEnabled: ReconnectEnum?

        @inlinable
        public init(logUploadEnabled: LogUploadEnum? = nil, reconnectEnabled: ReconnectEnum? = nil) {
            self.logUploadEnabled = logUploadEnabled
            self.reconnectEnabled = reconnectEnabled
        }

        private enum CodingKeys: String, CodingKey {
            case logUploadEnabled = "LogUploadEnabled"
            case reconnectEnabled = "ReconnectEnabled"
        }
    }

    public struct ClientPropertiesResult: AWSDecodableShape {
        /// Information about the Amazon WorkSpaces client.
        public let clientProperties: ClientProperties?
        /// The resource identifier, in the form of a directory ID.
        public let resourceId: String?

        @inlinable
        public init(clientProperties: ClientProperties? = nil, resourceId: String? = nil) {
            self.clientProperties = clientProperties
            self.resourceId = resourceId
        }

        private enum CodingKeys: String, CodingKey {
            case clientProperties = "ClientProperties"
            case resourceId = "ResourceId"
        }
    }

    public struct ComputeType: AWSEncodableShape & AWSDecodableShape {
        /// The compute type.
        public let name: Compute?

        @inlinable
        public init(name: Compute? = nil) {
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
        }
    }

    public struct ConnectClientAddIn: AWSDecodableShape {
        /// The client add-in identifier.
        public let addInId: String?
        /// The name of the client add in.
        public let name: String?
        /// The directory identifier for which the client add-in is configured.
        public let resourceId: String?
        /// The endpoint URL of the client add-in.
        public let url: String?

        @inlinable
        public init(addInId: String? = nil, name: String? = nil, resourceId: String? = nil, url: String? = nil) {
            self.addInId = addInId
            self.name = name
            self.resourceId = resourceId
            self.url = url
        }

        private enum CodingKeys: String, CodingKey {
            case addInId = "AddInId"
            case name = "Name"
            case resourceId = "ResourceId"
            case url = "URL"
        }
    }

    public struct ConnectionAlias: AWSDecodableShape {
        /// The identifier of the connection alias.
        public let aliasId: String?
        /// The association status of the connection alias.
        public let associations: [ConnectionAliasAssociation]?
        /// The connection string specified for the connection alias. The connection string must be in the form of a fully qualified domain name (FQDN), such as www.example.com.
        public let connectionString: String?
        /// The identifier of the Amazon Web Services account that owns the connection alias.
        public let ownerAccountId: String?
        /// The current state of the connection alias.
        public let state: ConnectionAliasState?

        @inlinable
        public init(aliasId: String? = nil, associations: [ConnectionAliasAssociation]? = nil, connectionString: String? = nil, ownerAccountId: String? = nil, state: ConnectionAliasState? = nil) {
            self.aliasId = aliasId
            self.associations = associations
            self.connectionString = connectionString
            self.ownerAccountId = ownerAccountId
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
            case associations = "Associations"
            case connectionString = "ConnectionString"
            case ownerAccountId = "OwnerAccountId"
            case state = "State"
        }
    }

    public struct ConnectionAliasAssociation: AWSDecodableShape {
        /// The identifier of the Amazon Web Services account that associated the connection alias with a directory.
        public let associatedAccountId: String?
        /// The association status of the connection alias.
        public let associationStatus: AssociationStatus?
        /// The identifier of the connection alias association. You use the connection identifier in the DNS TXT record when you're configuring your DNS routing policies.
        public let connectionIdentifier: String?
        /// The identifier of the directory associated with a connection alias.
        public let resourceId: String?

        @inlinable
        public init(associatedAccountId: String? = nil, associationStatus: AssociationStatus? = nil, connectionIdentifier: String? = nil, resourceId: String? = nil) {
            self.associatedAccountId = associatedAccountId
            self.associationStatus = associationStatus
            self.connectionIdentifier = connectionIdentifier
            self.resourceId = resourceId
        }

        private enum CodingKeys: String, CodingKey {
            case associatedAccountId = "AssociatedAccountId"
            case associationStatus = "AssociationStatus"
            case connectionIdentifier = "ConnectionIdentifier"
            case resourceId = "ResourceId"
        }
    }

    public struct ConnectionAliasPermission: AWSEncodableShape & AWSDecodableShape {
        /// Indicates whether the specified Amazon Web Services account is allowed to associate the connection alias with a directory.
        public let allowAssociation: Bool
        /// The identifier of the Amazon Web Services account that the connection alias is shared with.
        public let sharedAccountId: String

        @inlinable
        public init(allowAssociation: Bool, sharedAccountId: String) {
            self.allowAssociation = allowAssociation
            self.sharedAccountId = sharedAccountId
        }

        public func validate(name: String) throws {
            try self.validate(self.sharedAccountId, name: "sharedAccountId", parent: name, pattern: "^\\d{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case allowAssociation = "AllowAssociation"
            case sharedAccountId = "SharedAccountId"
        }
    }

    public struct CopyWorkspaceImageRequest: AWSEncodableShape {
        /// A description of the image.
        public let description: String?
        /// The name of the image.
        public let name: String
        /// The identifier of the source image.
        public let sourceImageId: String
        /// The identifier of the source Region.
        public let sourceRegion: String
        /// The tags for the image.
        public let tags: [Tag]?

        @inlinable
        public init(description: String? = nil, name: String, sourceImageId: String, sourceRegion: String, tags: [Tag]? = nil) {
            self.description = description
            self.name = name
            self.sourceImageId = sourceImageId
            self.sourceRegion = sourceRegion
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 256)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.name, name: "name", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9_./()\\\\-]+$")
            try self.validate(self.sourceImageId, name: "sourceImageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
            try self.validate(self.sourceRegion, name: "sourceRegion", parent: name, max: 31)
            try self.validate(self.sourceRegion, name: "sourceRegion", parent: name, min: 1)
            try self.validate(self.sourceRegion, name: "sourceRegion", parent: name, pattern: "^[-0-9a-z]{1,31}$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case name = "Name"
            case sourceImageId = "SourceImageId"
            case sourceRegion = "SourceRegion"
            case tags = "Tags"
        }
    }

    public struct CopyWorkspaceImageResult: AWSDecodableShape {
        /// The identifier of the image.
        public let imageId: String?

        @inlinable
        public init(imageId: String? = nil) {
            self.imageId = imageId
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
        }
    }

    public struct CreateAccountLinkInvitationRequest: AWSEncodableShape {
        /// A string of up to 64 ASCII characters that Amazon WorkSpaces uses to ensure idempotent creation.
        public let clientToken: String?
        /// The identifier of the target account.
        public let targetAccountId: String

        @inlinable
        public init(clientToken: String? = nil, targetAccountId: String) {
            self.clientToken = clientToken
            self.targetAccountId = targetAccountId
        }

        public func validate(name: String) throws {
            try self.validate(self.clientToken, name: "clientToken", parent: name, pattern: "^.{1,64}$")
            try self.validate(self.targetAccountId, name: "targetAccountId", parent: name, pattern: "^\\d{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case clientToken = "ClientToken"
            case targetAccountId = "TargetAccountId"
        }
    }

    public struct CreateAccountLinkInvitationResult: AWSDecodableShape {
        /// Information about the account link.
        public let accountLink: AccountLink?

        @inlinable
        public init(accountLink: AccountLink? = nil) {
            self.accountLink = accountLink
        }

        private enum CodingKeys: String, CodingKey {
            case accountLink = "AccountLink"
        }
    }

    public struct CreateConnectClientAddInRequest: AWSEncodableShape {
        /// The name of the client add-in.
        public let name: String
        /// The directory identifier for which to configure the client add-in.
        public let resourceId: String
        /// The endpoint URL of the Amazon Connect client add-in.
        public let url: String

        @inlinable
        public init(name: String, resourceId: String, url: String) {
            self.name = name
            self.resourceId = resourceId
            self.url = url
        }

        public func validate(name: String) throws {
            try self.validate(self.name, name: "name", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^.*$")
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.url, name: "url", parent: name, max: 1024)
            try self.validate(self.url, name: "url", parent: name, min: 1)
            try self.validate(self.url, name: "url", parent: name, pattern: "^(http|https)\\://\\S+$")
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case resourceId = "ResourceId"
            case url = "URL"
        }
    }

    public struct CreateConnectClientAddInResult: AWSDecodableShape {
        /// The client add-in identifier.
        public let addInId: String?

        @inlinable
        public init(addInId: String? = nil) {
            self.addInId = addInId
        }

        private enum CodingKeys: String, CodingKey {
            case addInId = "AddInId"
        }
    }

    public struct CreateConnectionAliasRequest: AWSEncodableShape {
        /// A connection string in the form of a fully qualified domain name (FQDN), such as www.example.com.  After you create a connection string, it is always associated to your Amazon Web Services account. You cannot recreate the same connection string with a different account, even if you delete all instances of it from the original account. The connection string is globally reserved for your account.
        public let connectionString: String
        /// The tags to associate with the connection alias.
        public let tags: [Tag]?

        @inlinable
        public init(connectionString: String, tags: [Tag]? = nil) {
            self.connectionString = connectionString
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.connectionString, name: "connectionString", parent: name, max: 255)
            try self.validate(self.connectionString, name: "connectionString", parent: name, min: 1)
            try self.validate(self.connectionString, name: "connectionString", parent: name, pattern: "^[.0-9a-zA-Z\\-]{1,255}$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case connectionString = "ConnectionString"
            case tags = "Tags"
        }
    }

    public struct CreateConnectionAliasResult: AWSDecodableShape {
        /// The identifier of the connection alias.
        public let aliasId: String?

        @inlinable
        public init(aliasId: String? = nil) {
            self.aliasId = aliasId
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
        }
    }

    public struct CreateIpGroupRequest: AWSEncodableShape {
        /// The description of the group.
        public let groupDesc: String?
        /// The name of the group.
        public let groupName: String
        /// The tags. Each WorkSpaces resource can have a maximum of 50 tags.
        public let tags: [Tag]?
        /// The rules to add to the group.
        public let userRules: [IpRuleItem]?

        @inlinable
        public init(groupDesc: String? = nil, groupName: String, tags: [Tag]? = nil, userRules: [IpRuleItem]? = nil) {
            self.groupDesc = groupDesc
            self.groupName = groupName
            self.tags = tags
            self.userRules = userRules
        }

        public func validate(name: String) throws {
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case groupDesc = "GroupDesc"
            case groupName = "GroupName"
            case tags = "Tags"
            case userRules = "UserRules"
        }
    }

    public struct CreateIpGroupResult: AWSDecodableShape {
        /// The identifier of the group.
        public let groupId: String?

        @inlinable
        public init(groupId: String? = nil) {
            self.groupId = groupId
        }

        private enum CodingKeys: String, CodingKey {
            case groupId = "GroupId"
        }
    }

    public struct CreateStandbyWorkspacesRequest: AWSEncodableShape {
        /// The Region of the primary WorkSpace.
        public let primaryRegion: String
        /// Information about the standby WorkSpace to be created.
        public let standbyWorkspaces: [StandbyWorkspace]

        @inlinable
        public init(primaryRegion: String, standbyWorkspaces: [StandbyWorkspace]) {
            self.primaryRegion = primaryRegion
            self.standbyWorkspaces = standbyWorkspaces
        }

        public func validate(name: String) throws {
            try self.validate(self.primaryRegion, name: "primaryRegion", parent: name, max: 31)
            try self.validate(self.primaryRegion, name: "primaryRegion", parent: name, min: 1)
            try self.validate(self.primaryRegion, name: "primaryRegion", parent: name, pattern: "^[-0-9a-z]{1,31}$")
            try self.standbyWorkspaces.forEach {
                try $0.validate(name: "\(name).standbyWorkspaces[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case primaryRegion = "PrimaryRegion"
            case standbyWorkspaces = "StandbyWorkspaces"
        }
    }

    public struct CreateStandbyWorkspacesResult: AWSDecodableShape {
        /// Information about the standby WorkSpace that could not be created.
        public let failedStandbyRequests: [FailedCreateStandbyWorkspacesRequest]?
        /// Information about the standby WorkSpace that was created.
        public let pendingStandbyRequests: [PendingCreateStandbyWorkspacesRequest]?

        @inlinable
        public init(failedStandbyRequests: [FailedCreateStandbyWorkspacesRequest]? = nil, pendingStandbyRequests: [PendingCreateStandbyWorkspacesRequest]? = nil) {
            self.failedStandbyRequests = failedStandbyRequests
            self.pendingStandbyRequests = pendingStandbyRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedStandbyRequests = "FailedStandbyRequests"
            case pendingStandbyRequests = "PendingStandbyRequests"
        }
    }

    public struct CreateTagsRequest: AWSEncodableShape {
        /// The identifier of the WorkSpaces resource. The supported resource types are WorkSpaces, registered directories, images, custom bundles, IP access control groups, and connection aliases.
        public let resourceId: String
        /// The tags. Each WorkSpaces resource can have a maximum of 50 tags.
        public let tags: [Tag]

        @inlinable
        public init(resourceId: String, tags: [Tag]) {
            self.resourceId = resourceId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 1)
            try self.tags.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case tags = "Tags"
        }
    }

    public struct CreateTagsResult: AWSDecodableShape {
        public init() {}
    }

    public struct CreateUpdatedWorkspaceImageRequest: AWSEncodableShape {
        /// A description of whether updates for the WorkSpace image are available.
        public let description: String
        /// The name of the new updated WorkSpace image.
        public let name: String
        /// The identifier of the source WorkSpace image.
        public let sourceImageId: String
        /// The tags that you want to add to the new updated WorkSpace image.  To add tags at the same time when you're creating the updated image, you must create an IAM policy that grants your IAM user permissions to use workspaces:CreateTags.
        public let tags: [Tag]?

        @inlinable
        public init(description: String, name: String, sourceImageId: String, tags: [Tag]? = nil) {
            self.description = description
            self.name = name
            self.sourceImageId = sourceImageId
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 256)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.name, name: "name", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9_./()\\\\-]+$")
            try self.validate(self.sourceImageId, name: "sourceImageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case name = "Name"
            case sourceImageId = "SourceImageId"
            case tags = "Tags"
        }
    }

    public struct CreateUpdatedWorkspaceImageResult: AWSDecodableShape {
        /// The identifier of the new updated WorkSpace image.
        public let imageId: String?

        @inlinable
        public init(imageId: String? = nil) {
            self.imageId = imageId
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
        }
    }

    public struct CreateWorkspaceBundleRequest: AWSEncodableShape {
        /// The description of the bundle.
        public let bundleDescription: String
        /// The name of the bundle.
        public let bundleName: String
        public let computeType: ComputeType
        /// The identifier of the image that is used to create the bundle.
        public let imageId: String
        public let rootStorage: RootStorage?
        /// The tags associated with the bundle.  To add tags at the same time when you're creating the bundle, you must create an IAM policy that  grants your IAM user permissions to use workspaces:CreateTags.
        public let tags: [Tag]?
        public let userStorage: UserStorage

        @inlinable
        public init(bundleDescription: String, bundleName: String, computeType: ComputeType, imageId: String, rootStorage: RootStorage? = nil, tags: [Tag]? = nil, userStorage: UserStorage) {
            self.bundleDescription = bundleDescription
            self.bundleName = bundleName
            self.computeType = computeType
            self.imageId = imageId
            self.rootStorage = rootStorage
            self.tags = tags
            self.userStorage = userStorage
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleDescription, name: "bundleDescription", parent: name, max: 255)
            try self.validate(self.bundleDescription, name: "bundleDescription", parent: name, min: 1)
            try self.validate(self.bundleDescription, name: "bundleDescription", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.bundleName, name: "bundleName", parent: name, max: 64)
            try self.validate(self.bundleName, name: "bundleName", parent: name, min: 1)
            try self.validate(self.bundleName, name: "bundleName", parent: name, pattern: "^[a-zA-Z0-9_./()\\\\-]+$")
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
            try self.rootStorage?.validate(name: "\(name).rootStorage")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.userStorage.validate(name: "\(name).userStorage")
        }

        private enum CodingKeys: String, CodingKey {
            case bundleDescription = "BundleDescription"
            case bundleName = "BundleName"
            case computeType = "ComputeType"
            case imageId = "ImageId"
            case rootStorage = "RootStorage"
            case tags = "Tags"
            case userStorage = "UserStorage"
        }
    }

    public struct CreateWorkspaceBundleResult: AWSDecodableShape {
        public let workspaceBundle: WorkspaceBundle?

        @inlinable
        public init(workspaceBundle: WorkspaceBundle? = nil) {
            self.workspaceBundle = workspaceBundle
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceBundle = "WorkspaceBundle"
        }
    }

    public struct CreateWorkspaceImageRequest: AWSEncodableShape {
        /// The description of the new WorkSpace image.
        public let description: String
        /// The name of the new WorkSpace image.
        public let name: String
        /// The tags that you want to add to the new WorkSpace image.  To add tags when you're creating the image, you must create an IAM policy that grants  your IAM user permission to use workspaces:CreateTags.
        public let tags: [Tag]?
        /// The identifier of the source WorkSpace
        public let workspaceId: String

        @inlinable
        public init(description: String, name: String, tags: [Tag]? = nil, workspaceId: String) {
            self.description = description
            self.name = name
            self.tags = tags
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.description, name: "description", parent: name, max: 256)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.name, name: "name", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^[a-zA-Z0-9_./()\\\\-]+$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case name = "Name"
            case tags = "Tags"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct CreateWorkspaceImageResult: AWSDecodableShape {
        /// The date when the image was created.
        public let created: Date?
        /// The description of the image.
        public let description: String?
        /// The identifier of the new WorkSpace image.
        public let imageId: String?
        /// The name of the image.
        public let name: String?
        /// The operating system that the image is running.
        public let operatingSystem: OperatingSystem?
        /// The identifier of the Amazon Web Services account that owns the image.
        public let ownerAccountId: String?
        /// Specifies whether the image is running on dedicated hardware.  When Bring Your Own License (BYOL) is enabled, this value is set  to DEDICATED. For more information, see   Bring Your Own Windows Desktop Images..
        public let requiredTenancy: WorkspaceImageRequiredTenancy?
        /// The availability status of the image.
        public let state: WorkspaceImageState?

        @inlinable
        public init(created: Date? = nil, description: String? = nil, imageId: String? = nil, name: String? = nil, operatingSystem: OperatingSystem? = nil, ownerAccountId: String? = nil, requiredTenancy: WorkspaceImageRequiredTenancy? = nil, state: WorkspaceImageState? = nil) {
            self.created = created
            self.description = description
            self.imageId = imageId
            self.name = name
            self.operatingSystem = operatingSystem
            self.ownerAccountId = ownerAccountId
            self.requiredTenancy = requiredTenancy
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case created = "Created"
            case description = "Description"
            case imageId = "ImageId"
            case name = "Name"
            case operatingSystem = "OperatingSystem"
            case ownerAccountId = "OwnerAccountId"
            case requiredTenancy = "RequiredTenancy"
            case state = "State"
        }
    }

    public struct CreateWorkspacesPoolRequest: AWSEncodableShape {
        /// Indicates the application settings of the pool.
        public let applicationSettings: ApplicationSettingsRequest?
        /// The identifier of the bundle for the pool.
        public let bundleId: String
        /// The user capacity of the pool.
        public let capacity: Capacity
        /// The pool description.
        public let description: String
        /// The identifier of the directory for the pool.
        public let directoryId: String
        /// The name of the pool.
        public let poolName: String
        /// The running mode for the pool.
        public let runningMode: PoolsRunningMode?
        /// The tags for the pool.
        public let tags: [Tag]?
        /// Indicates the timeout settings of the pool.
        public let timeoutSettings: TimeoutSettings?

        @inlinable
        public init(applicationSettings: ApplicationSettingsRequest? = nil, bundleId: String, capacity: Capacity, description: String, directoryId: String, poolName: String, runningMode: PoolsRunningMode? = nil, tags: [Tag]? = nil, timeoutSettings: TimeoutSettings? = nil) {
            self.applicationSettings = applicationSettings
            self.bundleId = bundleId
            self.capacity = capacity
            self.description = description
            self.directoryId = directoryId
            self.poolName = poolName
            self.runningMode = runningMode
            self.tags = tags
            self.timeoutSettings = timeoutSettings
        }

        public func validate(name: String) throws {
            try self.applicationSettings?.validate(name: "\(name).applicationSettings")
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            try self.capacity.validate(name: "\(name).capacity")
            try self.validate(self.description, name: "description", parent: name, max: 255)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.poolName, name: "poolName", parent: name, pattern: "^[A-Za-z0-9][A-Za-z0-9_.-]{0,63}$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.timeoutSettings?.validate(name: "\(name).timeoutSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case applicationSettings = "ApplicationSettings"
            case bundleId = "BundleId"
            case capacity = "Capacity"
            case description = "Description"
            case directoryId = "DirectoryId"
            case poolName = "PoolName"
            case runningMode = "RunningMode"
            case tags = "Tags"
            case timeoutSettings = "TimeoutSettings"
        }
    }

    public struct CreateWorkspacesPoolResult: AWSDecodableShape {
        /// Indicates the pool to create.
        public let workspacesPool: WorkspacesPool?

        @inlinable
        public init(workspacesPool: WorkspacesPool? = nil) {
            self.workspacesPool = workspacesPool
        }

        private enum CodingKeys: String, CodingKey {
            case workspacesPool = "WorkspacesPool"
        }
    }

    public struct CreateWorkspacesRequest: AWSEncodableShape {
        /// The WorkSpaces to create. You can specify up to 25 WorkSpaces.
        public let workspaces: [WorkspaceRequest]

        @inlinable
        public init(workspaces: [WorkspaceRequest]) {
            self.workspaces = workspaces
        }

        public func validate(name: String) throws {
            try self.workspaces.forEach {
                try $0.validate(name: "\(name).workspaces[]")
            }
            try self.validate(self.workspaces, name: "workspaces", parent: name, max: 25)
            try self.validate(self.workspaces, name: "workspaces", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case workspaces = "Workspaces"
        }
    }

    public struct CreateWorkspacesResult: AWSDecodableShape {
        /// Information about the WorkSpaces that could not be created.
        public let failedRequests: [FailedCreateWorkspaceRequest]?
        /// Information about the WorkSpaces that were created. Because this operation is asynchronous, the identifier returned is not immediately available for use with other operations. For example, if you call DescribeWorkspaces before the WorkSpace is created, the information returned can be incomplete.
        public let pendingRequests: [Workspace]?

        @inlinable
        public init(failedRequests: [FailedCreateWorkspaceRequest]? = nil, pendingRequests: [Workspace]? = nil) {
            self.failedRequests = failedRequests
            self.pendingRequests = pendingRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedRequests = "FailedRequests"
            case pendingRequests = "PendingRequests"
        }
    }

    public struct CustomWorkspaceImageImportErrorDetails: AWSDecodableShape {
        /// The error code that is returned for the image import.
        public let errorCode: String?
        /// The text of the error message that is returned for the image import.
        public let errorMessage: String?

        @inlinable
        public init(errorCode: String? = nil, errorMessage: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
        }
    }

    public struct DataReplicationSettings: AWSDecodableShape {
        /// Indicates whether data replication is enabled, and if enabled, the type of data replication.
        public let dataReplication: DataReplication?
        /// The date and time at which the last successful snapshot was taken of the  primary WorkSpace used for replicating data.
        public let recoverySnapshotTime: Date?

        @inlinable
        public init(dataReplication: DataReplication? = nil, recoverySnapshotTime: Date? = nil) {
            self.dataReplication = dataReplication
            self.recoverySnapshotTime = recoverySnapshotTime
        }

        private enum CodingKeys: String, CodingKey {
            case dataReplication = "DataReplication"
            case recoverySnapshotTime = "RecoverySnapshotTime"
        }
    }

    public struct DefaultClientBrandingAttributes: AWSDecodableShape {
        /// The forgotten password link. This is the web address that users can go to if they forget the password for their WorkSpace.
        public let forgotPasswordLink: String?
        /// The login message. Specified as a key value pair, in which the key is a locale and the value is the localized message for that locale. The only key supported is en_US. The HTML tags supported include the following: a, b, blockquote, br, cite, code, dd, dl, dt, div, em,  i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul.
        public let loginMessage: [String: String]?
        /// The logo. The only image format accepted is a binary data object that is converted from a .png file.
        public let logoUrl: String?
        /// The support email. The company's customer support email address.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default email is workspaces-feedback@amazon.com.
        public let supportEmail: String?
        /// The support link. The link for the company's customer support page for their WorkSpace.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive.You can specify one parameter for each platform type, but not both.   The default support link is workspaces-feedback@amazon.com.
        public let supportLink: String?

        @inlinable
        public init(forgotPasswordLink: String? = nil, loginMessage: [String: String]? = nil, logoUrl: String? = nil, supportEmail: String? = nil, supportLink: String? = nil) {
            self.forgotPasswordLink = forgotPasswordLink
            self.loginMessage = loginMessage
            self.logoUrl = logoUrl
            self.supportEmail = supportEmail
            self.supportLink = supportLink
        }

        private enum CodingKeys: String, CodingKey {
            case forgotPasswordLink = "ForgotPasswordLink"
            case loginMessage = "LoginMessage"
            case logoUrl = "LogoUrl"
            case supportEmail = "SupportEmail"
            case supportLink = "SupportLink"
        }
    }

    public struct DefaultImportClientBrandingAttributes: AWSEncodableShape {
        /// The forgotten password link. This is the web address that users can go to if they forget the password for their WorkSpace.
        public let forgotPasswordLink: String?
        /// The login message. Specified as a key value pair, in which the key is a locale and the value is the localized message for that locale. The only key supported is en_US. The HTML tags supported include the following: a, b, blockquote, br, cite, code, dd, dl, dt, div, em,  i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul.
        public let loginMessage: [String: String]?
        /// The logo. The only image format accepted is a binary data object that is converted from a .png file.
        public let logo: AWSBase64Data?
        /// The support email. The company's customer support email address.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default email is workspaces-feedback@amazon.com.
        public let supportEmail: String?
        /// The support link. The link for the company's customer support page for their WorkSpace.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default support link is workspaces-feedback@amazon.com.
        public let supportLink: String?

        @inlinable
        public init(forgotPasswordLink: String? = nil, loginMessage: [String: String]? = nil, logo: AWSBase64Data? = nil, supportEmail: String? = nil, supportLink: String? = nil) {
            self.forgotPasswordLink = forgotPasswordLink
            self.loginMessage = loginMessage
            self.logo = logo
            self.supportEmail = supportEmail
            self.supportLink = supportLink
        }

        public func validate(name: String) throws {
            try self.validate(self.forgotPasswordLink, name: "forgotPasswordLink", parent: name, max: 200)
            try self.validate(self.forgotPasswordLink, name: "forgotPasswordLink", parent: name, min: 1)
            try self.validate(self.forgotPasswordLink, name: "forgotPasswordLink", parent: name, pattern: "^(http|https)\\://\\S+$")
            try self.loginMessage?.forEach {
                try validate($0.key, name: "loginMessage.key", parent: name, max: 5)
                try validate($0.key, name: "loginMessage.key", parent: name, min: 5)
                try validate($0.key, name: "loginMessage.key", parent: name, pattern: "^[a-z]{2}_[A-Z]{2}$")
                try validate($0.value, name: "loginMessage[\"\($0.key)\"]", parent: name, max: 2000)
                try validate($0.value, name: "loginMessage[\"\($0.key)\"]", parent: name, pattern: "^.*$")
            }
            try self.validate(self.logo, name: "logo", parent: name, max: 1500000)
            try self.validate(self.logo, name: "logo", parent: name, min: 1)
            try self.validate(self.supportEmail, name: "supportEmail", parent: name, max: 64)
            try self.validate(self.supportEmail, name: "supportEmail", parent: name, min: 6)
            try self.validate(self.supportEmail, name: "supportEmail", parent: name, pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$")
            try self.validate(self.supportLink, name: "supportLink", parent: name, max: 200)
            try self.validate(self.supportLink, name: "supportLink", parent: name, min: 1)
            try self.validate(self.supportLink, name: "supportLink", parent: name, pattern: "^(http|https)\\://\\S+$")
        }

        private enum CodingKeys: String, CodingKey {
            case forgotPasswordLink = "ForgotPasswordLink"
            case loginMessage = "LoginMessage"
            case logo = "Logo"
            case supportEmail = "SupportEmail"
            case supportLink = "SupportLink"
        }
    }

    public struct DefaultWorkspaceCreationProperties: AWSDecodableShape {
        /// The identifier of the default security group to apply to WorkSpaces when they are created. For more information, see  Security Groups for Your WorkSpaces.
        public let customSecurityGroupId: String?
        /// The organizational unit (OU) in the directory for the WorkSpace machine accounts.
        public let defaultOu: String?
        /// Specifies whether to automatically assign an Elastic public IP address to WorkSpaces in this directory by default. If enabled, the Elastic public IP address allows outbound internet access from your WorkSpaces when you’re using an internet gateway in the Amazon VPC in which your WorkSpaces are located. If you're using a Network Address Translation (NAT) gateway for outbound internet access from your VPC, or if your WorkSpaces are in public subnets and you manually assign them Elastic IP addresses, you should disable this setting. This setting applies to new WorkSpaces that you launch or to existing WorkSpaces that you rebuild. For more information, see  Configure a VPC for Amazon WorkSpaces.
        public let enableInternetAccess: Bool?
        /// Specifies whether maintenance mode is enabled for WorkSpaces. For more information, see WorkSpace Maintenance.
        public let enableMaintenanceMode: Bool?
        /// Indicates the IAM role ARN of the instance.
        public let instanceIamRoleArn: String?
        /// Specifies whether WorkSpace users are local administrators on their WorkSpaces.
        public let userEnabledAsLocalAdministrator: Bool?

        @inlinable
        public init(customSecurityGroupId: String? = nil, defaultOu: String? = nil, enableInternetAccess: Bool? = nil, enableMaintenanceMode: Bool? = nil, instanceIamRoleArn: String? = nil, userEnabledAsLocalAdministrator: Bool? = nil) {
            self.customSecurityGroupId = customSecurityGroupId
            self.defaultOu = defaultOu
            self.enableInternetAccess = enableInternetAccess
            self.enableMaintenanceMode = enableMaintenanceMode
            self.instanceIamRoleArn = instanceIamRoleArn
            self.userEnabledAsLocalAdministrator = userEnabledAsLocalAdministrator
        }

        private enum CodingKeys: String, CodingKey {
            case customSecurityGroupId = "CustomSecurityGroupId"
            case defaultOu = "DefaultOu"
            case enableInternetAccess = "EnableInternetAccess"
            case enableMaintenanceMode = "EnableMaintenanceMode"
            case instanceIamRoleArn = "InstanceIamRoleArn"
            case userEnabledAsLocalAdministrator = "UserEnabledAsLocalAdministrator"
        }
    }

    public struct DeleteAccountLinkInvitationRequest: AWSEncodableShape {
        /// A string of up to 64 ASCII characters that Amazon WorkSpaces uses to ensure idempotent creation.
        public let clientToken: String?
        /// The identifier of the account link.
        public let linkId: String

        @inlinable
        public init(clientToken: String? = nil, linkId: String) {
            self.clientToken = clientToken
            self.linkId = linkId
        }

        public func validate(name: String) throws {
            try self.validate(self.clientToken, name: "clientToken", parent: name, pattern: "^.{1,64}$")
            try self.validate(self.linkId, name: "linkId", parent: name, pattern: "^link-.{8,24}$")
        }

        private enum CodingKeys: String, CodingKey {
            case clientToken = "ClientToken"
            case linkId = "LinkId"
        }
    }

    public struct DeleteAccountLinkInvitationResult: AWSDecodableShape {
        /// Information about the account link.
        public let accountLink: AccountLink?

        @inlinable
        public init(accountLink: AccountLink? = nil) {
            self.accountLink = accountLink
        }

        private enum CodingKeys: String, CodingKey {
            case accountLink = "AccountLink"
        }
    }

    public struct DeleteClientBrandingRequest: AWSEncodableShape {
        /// The device type for which you want to delete client branding.
        public let platforms: [ClientDeviceType]
        /// The directory identifier of the WorkSpace for which you want to delete client branding.
        public let resourceId: String

        @inlinable
        public init(platforms: [ClientDeviceType], resourceId: String) {
            self.platforms = platforms
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.platforms, name: "platforms", parent: name, max: 6)
            try self.validate(self.platforms, name: "platforms", parent: name, min: 1)
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case platforms = "Platforms"
            case resourceId = "ResourceId"
        }
    }

    public struct DeleteClientBrandingResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteConnectClientAddInRequest: AWSEncodableShape {
        /// The identifier of the client add-in to delete.
        public let addInId: String
        /// The directory identifier for which the client add-in is configured.
        public let resourceId: String

        @inlinable
        public init(addInId: String, resourceId: String) {
            self.addInId = addInId
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.addInId, name: "addInId", parent: name, max: 36)
            try self.validate(self.addInId, name: "addInId", parent: name, min: 36)
            try self.validate(self.addInId, name: "addInId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case addInId = "AddInId"
            case resourceId = "ResourceId"
        }
    }

    public struct DeleteConnectClientAddInResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteConnectionAliasRequest: AWSEncodableShape {
        /// The identifier of the connection alias to delete.
        public let aliasId: String

        @inlinable
        public init(aliasId: String) {
            self.aliasId = aliasId
        }

        public func validate(name: String) throws {
            try self.validate(self.aliasId, name: "aliasId", parent: name, max: 68)
            try self.validate(self.aliasId, name: "aliasId", parent: name, min: 13)
            try self.validate(self.aliasId, name: "aliasId", parent: name, pattern: "^wsca-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
        }
    }

    public struct DeleteConnectionAliasResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteIpGroupRequest: AWSEncodableShape {
        /// The identifier of the IP access control group.
        public let groupId: String

        @inlinable
        public init(groupId: String) {
            self.groupId = groupId
        }

        public func validate(name: String) throws {
            try self.validate(self.groupId, name: "groupId", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case groupId = "GroupId"
        }
    }

    public struct DeleteIpGroupResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteTagsRequest: AWSEncodableShape {
        /// The identifier of the WorkSpaces resource. The supported resource types are WorkSpaces, registered directories, images, custom bundles, IP access control groups, and connection aliases.
        public let resourceId: String
        /// The tag keys.
        public let tagKeys: [String]

        @inlinable
        public init(resourceId: String, tagKeys: [String]) {
            self.resourceId = resourceId
            self.tagKeys = tagKeys
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 1)
            try self.tagKeys.forEach {
                try validate($0, name: "tagKeys[]", parent: name, min: 1)
            }
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case tagKeys = "TagKeys"
        }
    }

    public struct DeleteTagsResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWorkspaceBundleRequest: AWSEncodableShape {
        /// The identifier of the bundle.
        public let bundleId: String?

        @inlinable
        public init(bundleId: String? = nil) {
            self.bundleId = bundleId
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
        }
    }

    public struct DeleteWorkspaceBundleResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeleteWorkspaceImageRequest: AWSEncodableShape {
        /// The identifier of the image.
        public let imageId: String

        @inlinable
        public init(imageId: String) {
            self.imageId = imageId
        }

        public func validate(name: String) throws {
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
        }
    }

    public struct DeleteWorkspaceImageResult: AWSDecodableShape {
        public init() {}
    }

    public struct DeployWorkspaceApplicationsRequest: AWSEncodableShape {
        /// Indicates whether the force flag is applied for the specified WorkSpace. When the force flag is enabled,  it allows previously failed deployments to be retried.
        public let force: Bool?
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(force: Bool? = nil, workspaceId: String) {
            self.force = force
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case force = "Force"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct DeployWorkspaceApplicationsResult: AWSDecodableShape {
        /// The list of deployed associations and information about them.
        public let deployment: WorkSpaceApplicationDeployment?

        @inlinable
        public init(deployment: WorkSpaceApplicationDeployment? = nil) {
            self.deployment = deployment
        }

        private enum CodingKeys: String, CodingKey {
            case deployment = "Deployment"
        }
    }

    public struct DeregisterWorkspaceDirectoryRequest: AWSEncodableShape {
        /// The identifier of the directory. If any WorkSpaces are registered to this directory, you must remove them before you deregister the directory, or you will receive an OperationNotSupportedException error.
        public let directoryId: String

        @inlinable
        public init(directoryId: String) {
            self.directoryId = directoryId
        }

        public func validate(name: String) throws {
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case directoryId = "DirectoryId"
        }
    }

    public struct DeregisterWorkspaceDirectoryResult: AWSDecodableShape {
        public init() {}
    }

    public struct DescribeAccountModificationsRequest: AWSEncodableShape {
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(nextToken: String? = nil) {
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
        }
    }

    public struct DescribeAccountModificationsResult: AWSDecodableShape {
        /// The list of modifications to the configuration of BYOL.
        public let accountModifications: [AccountModification]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(accountModifications: [AccountModification]? = nil, nextToken: String? = nil) {
            self.accountModifications = accountModifications
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case accountModifications = "AccountModifications"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeAccountRequest: AWSEncodableShape {
        public init() {}
    }

    public struct DescribeAccountResult: AWSDecodableShape {
        /// The type of linked account.
        public let dedicatedTenancyAccountType: DedicatedTenancyAccountType?
        /// The IP address range, specified as an IPv4 CIDR block, used for the management network interface. The management network interface is connected to a secure Amazon WorkSpaces management network. It is used for interactive streaming of the WorkSpace desktop to Amazon WorkSpaces clients, and to allow Amazon WorkSpaces to manage the WorkSpace.
        public let dedicatedTenancyManagementCidrRange: String?
        /// The status of BYOL (whether BYOL is enabled or disabled).
        public let dedicatedTenancySupport: DedicatedTenancySupportResultEnum?
        /// The text message to describe the status of BYOL.
        public let message: String?

        @inlinable
        public init(dedicatedTenancyAccountType: DedicatedTenancyAccountType? = nil, dedicatedTenancyManagementCidrRange: String? = nil, dedicatedTenancySupport: DedicatedTenancySupportResultEnum? = nil, message: String? = nil) {
            self.dedicatedTenancyAccountType = dedicatedTenancyAccountType
            self.dedicatedTenancyManagementCidrRange = dedicatedTenancyManagementCidrRange
            self.dedicatedTenancySupport = dedicatedTenancySupport
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case dedicatedTenancyAccountType = "DedicatedTenancyAccountType"
            case dedicatedTenancyManagementCidrRange = "DedicatedTenancyManagementCidrRange"
            case dedicatedTenancySupport = "DedicatedTenancySupport"
            case message = "Message"
        }
    }

    public struct DescribeApplicationAssociationsRequest: AWSEncodableShape {
        /// The identifier of the specified application.
        public let applicationId: String
        /// The resource type of the associated resources.
        public let associatedResourceTypes: [ApplicationAssociatedResourceType]
        /// The maximum number of associations to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(applicationId: String, associatedResourceTypes: [ApplicationAssociatedResourceType], maxResults: Int? = nil, nextToken: String? = nil) {
            self.applicationId = applicationId
            self.associatedResourceTypes = associatedResourceTypes
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.applicationId, name: "applicationId", parent: name, pattern: "^wsa-[0-9a-z]{8,63}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case associatedResourceTypes = "AssociatedResourceTypes"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeApplicationAssociationsResult: AWSDecodableShape {
        /// List of associations and information about them.
        public let associations: [ApplicationResourceAssociation]?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(associations: [ApplicationResourceAssociation]? = nil, nextToken: String? = nil) {
            self.associations = associations
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeApplicationsRequest: AWSEncodableShape {
        /// The identifiers of one or more applications.
        public let applicationIds: [String]?
        /// The compute types supported by the applications.
        public let computeTypeNames: [Compute]?
        /// The license availability for the applications.
        public let licenseType: WorkSpaceApplicationLicenseType?
        /// The maximum number of applications to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?
        /// The operating systems supported by the applications.
        public let operatingSystemNames: [OperatingSystemName]?
        /// The owner of the applications.
        public let owner: String?

        @inlinable
        public init(applicationIds: [String]? = nil, computeTypeNames: [Compute]? = nil, licenseType: WorkSpaceApplicationLicenseType? = nil, maxResults: Int? = nil, nextToken: String? = nil, operatingSystemNames: [OperatingSystemName]? = nil, owner: String? = nil) {
            self.applicationIds = applicationIds
            self.computeTypeNames = computeTypeNames
            self.licenseType = licenseType
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.operatingSystemNames = operatingSystemNames
            self.owner = owner
        }

        public func validate(name: String) throws {
            try self.applicationIds?.forEach {
                try validate($0, name: "applicationIds[]", parent: name, pattern: "^wsa-[0-9a-z]{8,63}$")
            }
            try self.validate(self.applicationIds, name: "applicationIds", parent: name, max: 25)
            try self.validate(self.applicationIds, name: "applicationIds", parent: name, min: 1)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.owner, name: "owner", parent: name, pattern: "^\\d{12}|AMAZON$")
        }

        private enum CodingKeys: String, CodingKey {
            case applicationIds = "ApplicationIds"
            case computeTypeNames = "ComputeTypeNames"
            case licenseType = "LicenseType"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case operatingSystemNames = "OperatingSystemNames"
            case owner = "Owner"
        }
    }

    public struct DescribeApplicationsResult: AWSDecodableShape {
        /// List of information about the specified applications.
        public let applications: [WorkSpaceApplication]?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(applications: [WorkSpaceApplication]? = nil, nextToken: String? = nil) {
            self.applications = applications
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case applications = "Applications"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeBundleAssociationsRequest: AWSEncodableShape {
        /// The resource types of the associated resource.
        public let associatedResourceTypes: [BundleAssociatedResourceType]
        /// The identifier of the bundle.
        public let bundleId: String

        @inlinable
        public init(associatedResourceTypes: [BundleAssociatedResourceType], bundleId: String) {
            self.associatedResourceTypes = associatedResourceTypes
            self.bundleId = bundleId
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case associatedResourceTypes = "AssociatedResourceTypes"
            case bundleId = "BundleId"
        }
    }

    public struct DescribeBundleAssociationsResult: AWSDecodableShape {
        /// List of information about the specified associations.
        public let associations: [BundleResourceAssociation]?

        @inlinable
        public init(associations: [BundleResourceAssociation]? = nil) {
            self.associations = associations
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
        }
    }

    public struct DescribeClientBrandingRequest: AWSEncodableShape {
        /// The directory identifier of the WorkSpace for which you want to view client branding information.
        public let resourceId: String

        @inlinable
        public init(resourceId: String) {
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
        }
    }

    public struct DescribeClientBrandingResult: AWSDecodableShape {
        /// The branding information for Android devices.
        public let deviceTypeAndroid: DefaultClientBrandingAttributes?
        /// The branding information for iOS devices.
        public let deviceTypeIos: IosClientBrandingAttributes?
        /// The branding information for Linux devices.
        public let deviceTypeLinux: DefaultClientBrandingAttributes?
        /// The branding information for macOS devices.
        public let deviceTypeOsx: DefaultClientBrandingAttributes?
        /// The branding information for Web access.
        public let deviceTypeWeb: DefaultClientBrandingAttributes?
        /// The branding information for Windows devices.
        public let deviceTypeWindows: DefaultClientBrandingAttributes?

        @inlinable
        public init(deviceTypeAndroid: DefaultClientBrandingAttributes? = nil, deviceTypeIos: IosClientBrandingAttributes? = nil, deviceTypeLinux: DefaultClientBrandingAttributes? = nil, deviceTypeOsx: DefaultClientBrandingAttributes? = nil, deviceTypeWeb: DefaultClientBrandingAttributes? = nil, deviceTypeWindows: DefaultClientBrandingAttributes? = nil) {
            self.deviceTypeAndroid = deviceTypeAndroid
            self.deviceTypeIos = deviceTypeIos
            self.deviceTypeLinux = deviceTypeLinux
            self.deviceTypeOsx = deviceTypeOsx
            self.deviceTypeWeb = deviceTypeWeb
            self.deviceTypeWindows = deviceTypeWindows
        }

        private enum CodingKeys: String, CodingKey {
            case deviceTypeAndroid = "DeviceTypeAndroid"
            case deviceTypeIos = "DeviceTypeIos"
            case deviceTypeLinux = "DeviceTypeLinux"
            case deviceTypeOsx = "DeviceTypeOsx"
            case deviceTypeWeb = "DeviceTypeWeb"
            case deviceTypeWindows = "DeviceTypeWindows"
        }
    }

    public struct DescribeClientPropertiesRequest: AWSEncodableShape {
        /// The resource identifier, in the form of directory IDs.
        public let resourceIds: [String]

        @inlinable
        public init(resourceIds: [String]) {
            self.resourceIds = resourceIds
        }

        public func validate(name: String) throws {
            try self.resourceIds.forEach {
                try validate($0, name: "resourceIds[]", parent: name, min: 1)
            }
            try self.validate(self.resourceIds, name: "resourceIds", parent: name, max: 25)
            try self.validate(self.resourceIds, name: "resourceIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceIds = "ResourceIds"
        }
    }

    public struct DescribeClientPropertiesResult: AWSDecodableShape {
        /// Information about the specified Amazon WorkSpaces clients.
        public let clientPropertiesList: [ClientPropertiesResult]?

        @inlinable
        public init(clientPropertiesList: [ClientPropertiesResult]? = nil) {
            self.clientPropertiesList = clientPropertiesList
        }

        private enum CodingKeys: String, CodingKey {
            case clientPropertiesList = "ClientPropertiesList"
        }
    }

    public struct DescribeConnectClientAddInsRequest: AWSEncodableShape {
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?
        /// The directory identifier for which the client add-in is configured.
        public let resourceId: String

        @inlinable
        public init(maxResults: Int? = nil, nextToken: String? = nil, resourceId: String) {
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
            case resourceId = "ResourceId"
        }
    }

    public struct DescribeConnectClientAddInsResult: AWSDecodableShape {
        /// Information about client add-ins.
        public let addIns: [ConnectClientAddIn]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(addIns: [ConnectClientAddIn]? = nil, nextToken: String? = nil) {
            self.addIns = addIns
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case addIns = "AddIns"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeConnectionAliasPermissionsRequest: AWSEncodableShape {
        /// The identifier of the connection alias.
        public let aliasId: String
        /// The maximum number of results to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(aliasId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.aliasId = aliasId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.aliasId, name: "aliasId", parent: name, max: 68)
            try self.validate(self.aliasId, name: "aliasId", parent: name, min: 13)
            try self.validate(self.aliasId, name: "aliasId", parent: name, pattern: "^wsca-[0-9a-z]{8,63}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeConnectionAliasPermissionsResult: AWSDecodableShape {
        /// The identifier of the connection alias.
        public let aliasId: String?
        /// The permissions associated with a connection alias.
        public let connectionAliasPermissions: [ConnectionAliasPermission]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(aliasId: String? = nil, connectionAliasPermissions: [ConnectionAliasPermission]? = nil, nextToken: String? = nil) {
            self.aliasId = aliasId
            self.connectionAliasPermissions = connectionAliasPermissions
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
            case connectionAliasPermissions = "ConnectionAliasPermissions"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeConnectionAliasesRequest: AWSEncodableShape {
        /// The identifiers of the connection aliases to describe.
        public let aliasIds: [String]?
        /// The maximum number of connection aliases to return.
        public let limit: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?
        /// The identifier of the directory associated with the connection alias.
        public let resourceId: String?

        @inlinable
        public init(aliasIds: [String]? = nil, limit: Int? = nil, nextToken: String? = nil, resourceId: String? = nil) {
            self.aliasIds = aliasIds
            self.limit = limit
            self.nextToken = nextToken
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.aliasIds?.forEach {
                try validate($0, name: "aliasIds[]", parent: name, max: 68)
                try validate($0, name: "aliasIds[]", parent: name, min: 13)
                try validate($0, name: "aliasIds[]", parent: name, pattern: "^wsca-[0-9a-z]{8,63}$")
            }
            try self.validate(self.aliasIds, name: "aliasIds", parent: name, max: 25)
            try self.validate(self.aliasIds, name: "aliasIds", parent: name, min: 1)
            try self.validate(self.limit, name: "limit", parent: name, max: 25)
            try self.validate(self.limit, name: "limit", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case aliasIds = "AliasIds"
            case limit = "Limit"
            case nextToken = "NextToken"
            case resourceId = "ResourceId"
        }
    }

    public struct DescribeConnectionAliasesResult: AWSDecodableShape {
        /// Information about the specified connection aliases.
        public let connectionAliases: [ConnectionAlias]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(connectionAliases: [ConnectionAlias]? = nil, nextToken: String? = nil) {
            self.connectionAliases = connectionAliases
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case connectionAliases = "ConnectionAliases"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeCustomWorkspaceImageImportRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace image.
        public let imageId: String

        @inlinable
        public init(imageId: String) {
            self.imageId = imageId
        }

        public func validate(name: String) throws {
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
        }
    }

    public struct DescribeCustomWorkspaceImageImportResult: AWSDecodableShape {
        /// The timestamp when the WorkSpace image import was created.
        public let created: Date?
        /// Describes in-depth details about the error. These details include the possible causes of the error and troubleshooting information.
        public let errorDetails: [CustomWorkspaceImageImportErrorDetails]?
        /// The image builder instance ID of the WorkSpace image.
        public let imageBuilderInstanceId: String?
        /// The identifier of the WorkSpace image.
        public let imageId: String?
        /// Describes the image import source.
        public let imageSource: ImageSourceIdentifier?
        /// The infrastructure configuration ARN that specifies how the WorkSpace image is built.
        public let infrastructureConfigurationArn: String?
        /// The timestamp when the WorkSpace image import was last updated.
        public let lastUpdatedTime: Date?
        /// The state of the WorkSpace image.
        public let state: CustomWorkspaceImageImportState?

        @inlinable
        public init(created: Date? = nil, errorDetails: [CustomWorkspaceImageImportErrorDetails]? = nil, imageBuilderInstanceId: String? = nil, imageId: String? = nil, imageSource: ImageSourceIdentifier? = nil, infrastructureConfigurationArn: String? = nil, lastUpdatedTime: Date? = nil, state: CustomWorkspaceImageImportState? = nil) {
            self.created = created
            self.errorDetails = errorDetails
            self.imageBuilderInstanceId = imageBuilderInstanceId
            self.imageId = imageId
            self.imageSource = imageSource
            self.infrastructureConfigurationArn = infrastructureConfigurationArn
            self.lastUpdatedTime = lastUpdatedTime
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case created = "Created"
            case errorDetails = "ErrorDetails"
            case imageBuilderInstanceId = "ImageBuilderInstanceId"
            case imageId = "ImageId"
            case imageSource = "ImageSource"
            case infrastructureConfigurationArn = "InfrastructureConfigurationArn"
            case lastUpdatedTime = "LastUpdatedTime"
            case state = "State"
        }
    }

    public struct DescribeImageAssociationsRequest: AWSEncodableShape {
        /// The resource types of the associated resource.
        public let associatedResourceTypes: [ImageAssociatedResourceType]
        /// The identifier of the image.
        public let imageId: String

        @inlinable
        public init(associatedResourceTypes: [ImageAssociatedResourceType], imageId: String) {
            self.associatedResourceTypes = associatedResourceTypes
            self.imageId = imageId
        }

        public func validate(name: String) throws {
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case associatedResourceTypes = "AssociatedResourceTypes"
            case imageId = "ImageId"
        }
    }

    public struct DescribeImageAssociationsResult: AWSDecodableShape {
        /// List of information about the specified associations.
        public let associations: [ImageResourceAssociation]?

        @inlinable
        public init(associations: [ImageResourceAssociation]? = nil) {
            self.associations = associations
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
        }
    }

    public struct DescribeIpGroupsRequest: AWSEncodableShape {
        /// The identifiers of one or more IP access control groups.
        public let groupIds: [String]?
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(groupIds: [String]? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.groupIds = groupIds
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.groupIds?.forEach {
                try validate($0, name: "groupIds[]", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
            }
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case groupIds = "GroupIds"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeIpGroupsResult: AWSDecodableShape {
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?
        /// Information about the IP access control groups.
        public let result: [WorkspacesIpGroup]?

        @inlinable
        public init(nextToken: String? = nil, result: [WorkspacesIpGroup]? = nil) {
            self.nextToken = nextToken
            self.result = result
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case result = "Result"
        }
    }

    public struct DescribeTagsRequest: AWSEncodableShape {
        /// The identifier of the WorkSpaces resource. The supported resource types are WorkSpaces, registered directories, images, custom bundles, IP access control groups, and connection aliases.
        public let resourceId: String

        @inlinable
        public init(resourceId: String) {
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
        }
    }

    public struct DescribeTagsResult: AWSDecodableShape {
        /// The tags.
        public let tagList: [Tag]?

        @inlinable
        public init(tagList: [Tag]? = nil) {
            self.tagList = tagList
        }

        private enum CodingKeys: String, CodingKey {
            case tagList = "TagList"
        }
    }

    public struct DescribeWorkspaceAssociationsRequest: AWSEncodableShape {
        /// The resource types of the associated resources.
        public let associatedResourceTypes: [WorkSpaceAssociatedResourceType]
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(associatedResourceTypes: [WorkSpaceAssociatedResourceType], workspaceId: String) {
            self.associatedResourceTypes = associatedResourceTypes
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case associatedResourceTypes = "AssociatedResourceTypes"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct DescribeWorkspaceAssociationsResult: AWSDecodableShape {
        /// List of information about the specified associations.
        public let associations: [WorkspaceResourceAssociation]?

        @inlinable
        public init(associations: [WorkspaceResourceAssociation]? = nil) {
            self.associations = associations
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
        }
    }

    public struct DescribeWorkspaceBundlesRequest: AWSEncodableShape {
        /// The identifiers of the bundles. You cannot combine this parameter with any other filter.
        public let bundleIds: [String]?
        /// The token for the next set of results. (You received this token from a previous call.)
        public let nextToken: String?
        /// The owner of the bundles. You cannot combine this parameter with any other filter. To describe the bundles provided by Amazon Web Services, specify AMAZON.  To describe the bundles that belong to your account, don't specify a value.
        public let owner: String?

        @inlinable
        public init(bundleIds: [String]? = nil, nextToken: String? = nil, owner: String? = nil) {
            self.bundleIds = bundleIds
            self.nextToken = nextToken
            self.owner = owner
        }

        public func validate(name: String) throws {
            try self.bundleIds?.forEach {
                try validate($0, name: "bundleIds[]", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            }
            try self.validate(self.bundleIds, name: "bundleIds", parent: name, max: 25)
            try self.validate(self.bundleIds, name: "bundleIds", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case bundleIds = "BundleIds"
            case nextToken = "NextToken"
            case owner = "Owner"
        }
    }

    public struct DescribeWorkspaceBundlesResult: AWSDecodableShape {
        /// Information about the bundles.
        public let bundles: [WorkspaceBundle]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more  results to return. This token is valid for one day and must be used within that time frame.
        public let nextToken: String?

        @inlinable
        public init(bundles: [WorkspaceBundle]? = nil, nextToken: String? = nil) {
            self.bundles = bundles
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case bundles = "Bundles"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeWorkspaceDirectoriesFilter: AWSEncodableShape {
        /// The name of the WorkSpaces to filter.
        public let name: DescribeWorkspaceDirectoriesFilterName
        /// The values for filtering WorkSpaces
        public let values: [String]

        @inlinable
        public init(name: DescribeWorkspaceDirectoriesFilterName, values: [String]) {
            self.name = name
            self.values = values
        }

        public func validate(name: String) throws {
            try self.values.forEach {
                try validate($0, name: "values[]", parent: name, pattern: "^[0-9a-zA-Z\\*\\.\\\\/\\?-_]{0,64}$")
            }
            try self.validate(self.values, name: "values", parent: name, max: 25)
            try self.validate(self.values, name: "values", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case values = "Values"
        }
    }

    public struct DescribeWorkspaceDirectoriesRequest: AWSEncodableShape {
        /// The identifiers of the directories. If the value is null, all directories are retrieved.
        public let directoryIds: [String]?
        /// The filter condition for the WorkSpaces.
        public let filters: [DescribeWorkspaceDirectoriesFilter]?
        /// The maximum number of directories to return.
        public let limit: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?
        /// The names of the WorkSpace directories.
        public let workspaceDirectoryNames: [String]?

        @inlinable
        public init(directoryIds: [String]? = nil, filters: [DescribeWorkspaceDirectoriesFilter]? = nil, limit: Int? = nil, nextToken: String? = nil, workspaceDirectoryNames: [String]? = nil) {
            self.directoryIds = directoryIds
            self.filters = filters
            self.limit = limit
            self.nextToken = nextToken
            self.workspaceDirectoryNames = workspaceDirectoryNames
        }

        public func validate(name: String) throws {
            try self.directoryIds?.forEach {
                try validate($0, name: "directoryIds[]", parent: name, max: 65)
                try validate($0, name: "directoryIds[]", parent: name, min: 10)
                try validate($0, name: "directoryIds[]", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            }
            try self.validate(self.directoryIds, name: "directoryIds", parent: name, max: 25)
            try self.validate(self.directoryIds, name: "directoryIds", parent: name, min: 1)
            try self.filters?.forEach {
                try $0.validate(name: "\(name).filters[]")
            }
            try self.validate(self.filters, name: "filters", parent: name, max: 25)
            try self.validate(self.filters, name: "filters", parent: name, min: 1)
            try self.validate(self.limit, name: "limit", parent: name, max: 25)
            try self.validate(self.limit, name: "limit", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.workspaceDirectoryNames?.forEach {
                try validate($0, name: "workspaceDirectoryNames[]", parent: name, pattern: "^[a-zA-Z0-9][a-zA-Z0-9_.\\s-]{1,64}$")
            }
            try self.validate(self.workspaceDirectoryNames, name: "workspaceDirectoryNames", parent: name, max: 25)
            try self.validate(self.workspaceDirectoryNames, name: "workspaceDirectoryNames", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case directoryIds = "DirectoryIds"
            case filters = "Filters"
            case limit = "Limit"
            case nextToken = "NextToken"
            case workspaceDirectoryNames = "WorkspaceDirectoryNames"
        }
    }

    public struct DescribeWorkspaceDirectoriesResult: AWSDecodableShape {
        /// Information about the directories.
        public let directories: [WorkspaceDirectory]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(directories: [WorkspaceDirectory]? = nil, nextToken: String? = nil) {
            self.directories = directories
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case directories = "Directories"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeWorkspaceImagePermissionsRequest: AWSEncodableShape {
        /// The identifier of the image.
        public let imageId: String
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(imageId: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.imageId = imageId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeWorkspaceImagePermissionsResult: AWSDecodableShape {
        /// The identifier of the image.
        public let imageId: String?
        /// The identifiers of the Amazon Web Services accounts that the image has been shared with.
        public let imagePermissions: [ImagePermission]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(imageId: String? = nil, imagePermissions: [ImagePermission]? = nil, nextToken: String? = nil) {
            self.imageId = imageId
            self.imagePermissions = imagePermissions
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
            case imagePermissions = "ImagePermissions"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeWorkspaceImagesRequest: AWSEncodableShape {
        /// The identifier of the image.
        public let imageIds: [String]?
        /// The type (owned or shared) of the image.
        public let imageType: ImageType?
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(imageIds: [String]? = nil, imageType: ImageType? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.imageIds = imageIds
            self.imageType = imageType
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.imageIds?.forEach {
                try validate($0, name: "imageIds[]", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
            }
            try self.validate(self.imageIds, name: "imageIds", parent: name, max: 25)
            try self.validate(self.imageIds, name: "imageIds", parent: name, min: 1)
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case imageIds = "ImageIds"
            case imageType = "ImageType"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeWorkspaceImagesResult: AWSDecodableShape {
        /// Information about the images.
        public let images: [WorkspaceImage]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(images: [WorkspaceImage]? = nil, nextToken: String? = nil) {
            self.images = images
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case images = "Images"
            case nextToken = "NextToken"
        }
    }

    public struct DescribeWorkspaceSnapshotsRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(workspaceId: String) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct DescribeWorkspaceSnapshotsResult: AWSDecodableShape {
        /// Information about the snapshots that can be used to rebuild a WorkSpace. These snapshots include the user volume.
        public let rebuildSnapshots: [Snapshot]?
        /// Information about the snapshots that can be used to restore a WorkSpace. These snapshots include both the root volume and the user volume.
        public let restoreSnapshots: [Snapshot]?

        @inlinable
        public init(rebuildSnapshots: [Snapshot]? = nil, restoreSnapshots: [Snapshot]? = nil) {
            self.rebuildSnapshots = rebuildSnapshots
            self.restoreSnapshots = restoreSnapshots
        }

        private enum CodingKeys: String, CodingKey {
            case rebuildSnapshots = "RebuildSnapshots"
            case restoreSnapshots = "RestoreSnapshots"
        }
    }

    public struct DescribeWorkspacesConnectionStatusRequest: AWSEncodableShape {
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?
        /// The identifiers of the WorkSpaces. You can specify up to 25 WorkSpaces.
        public let workspaceIds: [String]?

        @inlinable
        public init(nextToken: String? = nil, workspaceIds: [String]? = nil) {
            self.nextToken = nextToken
            self.workspaceIds = workspaceIds
        }

        public func validate(name: String) throws {
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.workspaceIds?.forEach {
                try validate($0, name: "workspaceIds[]", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
            }
            try self.validate(self.workspaceIds, name: "workspaceIds", parent: name, max: 25)
            try self.validate(self.workspaceIds, name: "workspaceIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case workspaceIds = "WorkspaceIds"
        }
    }

    public struct DescribeWorkspacesConnectionStatusResult: AWSDecodableShape {
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?
        /// Information about the connection status of the WorkSpace.
        public let workspacesConnectionStatus: [WorkspaceConnectionStatus]?

        @inlinable
        public init(nextToken: String? = nil, workspacesConnectionStatus: [WorkspaceConnectionStatus]? = nil) {
            self.nextToken = nextToken
            self.workspacesConnectionStatus = workspacesConnectionStatus
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case workspacesConnectionStatus = "WorkspacesConnectionStatus"
        }
    }

    public struct DescribeWorkspacesPoolSessionsRequest: AWSEncodableShape {
        /// The maximum size of each page of results. The default value is 20 and the maximum value is 50.
        public let limit: Int?
        /// If you received a NextToken from a previous call that was paginated,  provide this token to receive the next set of results.
        public let nextToken: String?
        /// The identifier of the pool.
        public let poolId: String
        /// The identifier of the user.
        public let userId: String?

        @inlinable
        public init(limit: Int? = nil, nextToken: String? = nil, poolId: String, userId: String? = nil) {
            self.limit = limit
            self.nextToken = nextToken
            self.poolId = poolId
            self.userId = userId
        }

        public func validate(name: String) throws {
            try self.validate(self.limit, name: "limit", parent: name, max: 50)
            try self.validate(self.limit, name: "limit", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.poolId, name: "poolId", parent: name, pattern: "^wspool-[0-9a-z]{9}$")
            try self.validate(self.userId, name: "userId", parent: name, max: 128)
            try self.validate(self.userId, name: "userId", parent: name, min: 2)
        }

        private enum CodingKeys: String, CodingKey {
            case limit = "Limit"
            case nextToken = "NextToken"
            case poolId = "PoolId"
            case userId = "UserId"
        }
    }

    public struct DescribeWorkspacesPoolSessionsResult: AWSDecodableShape {
        /// If you received a NextToken from a previous call that was paginated,  provide this token to receive the next set of results.
        public let nextToken: String?
        /// Describes the pool sessions.
        public let sessions: [WorkspacesPoolSession]?

        @inlinable
        public init(nextToken: String? = nil, sessions: [WorkspacesPoolSession]? = nil) {
            self.nextToken = nextToken
            self.sessions = sessions
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case sessions = "Sessions"
        }
    }

    public struct DescribeWorkspacesPoolsFilter: AWSEncodableShape {
        /// The name of the pool to filter.
        public let name: DescribeWorkspacesPoolsFilterName
        /// The operator values for filtering WorkSpaces Pools.
        public let `operator`: DescribeWorkspacesPoolsFilterOperator
        /// The values for filtering WorkSpaces Pools.
        public let values: [String]

        @inlinable
        public init(name: DescribeWorkspacesPoolsFilterName, operator: DescribeWorkspacesPoolsFilterOperator, values: [String]) {
            self.name = name
            self.`operator` = `operator`
            self.values = values
        }

        public func validate(name: String) throws {
            try self.values.forEach {
                try validate($0, name: "values[]", parent: name, max: 128)
                try validate($0, name: "values[]", parent: name, min: 1)
                try validate($0, name: "values[]", parent: name, pattern: "^[A-Za-z0-9][A-Za-z0-9_.-]+$")
            }
            try self.validate(self.values, name: "values", parent: name, max: 25)
            try self.validate(self.values, name: "values", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case name = "Name"
            case `operator` = "Operator"
            case values = "Values"
        }
    }

    public struct DescribeWorkspacesPoolsRequest: AWSEncodableShape {
        /// The filter conditions for the WorkSpaces Pool to return.
        public let filters: [DescribeWorkspacesPoolsFilter]?
        /// The maximum number of items to return.
        public let limit: Int?
        /// If you received a NextToken from a previous call that was paginated,  provide this token to receive the next set of results.
        public let nextToken: String?
        /// The identifier of the WorkSpaces Pools.
        public let poolIds: [String]?

        @inlinable
        public init(filters: [DescribeWorkspacesPoolsFilter]? = nil, limit: Int? = nil, nextToken: String? = nil, poolIds: [String]? = nil) {
            self.filters = filters
            self.limit = limit
            self.nextToken = nextToken
            self.poolIds = poolIds
        }

        public func validate(name: String) throws {
            try self.filters?.forEach {
                try $0.validate(name: "\(name).filters[]")
            }
            try self.validate(self.filters, name: "filters", parent: name, max: 25)
            try self.validate(self.filters, name: "filters", parent: name, min: 1)
            try self.validate(self.limit, name: "limit", parent: name, max: 25)
            try self.validate(self.limit, name: "limit", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.poolIds?.forEach {
                try validate($0, name: "poolIds[]", parent: name, pattern: "^wspool-[0-9a-z]{9}$")
            }
            try self.validate(self.poolIds, name: "poolIds", parent: name, max: 25)
            try self.validate(self.poolIds, name: "poolIds", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case filters = "Filters"
            case limit = "Limit"
            case nextToken = "NextToken"
            case poolIds = "PoolIds"
        }
    }

    public struct DescribeWorkspacesPoolsResult: AWSDecodableShape {
        /// If you received a NextToken from a previous call that was paginated,  provide this token to receive the next set of results.
        public let nextToken: String?
        /// Information about the WorkSpaces Pools.
        public let workspacesPools: [WorkspacesPool]?

        @inlinable
        public init(nextToken: String? = nil, workspacesPools: [WorkspacesPool]? = nil) {
            self.nextToken = nextToken
            self.workspacesPools = workspacesPools
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case workspacesPools = "WorkspacesPools"
        }
    }

    public struct DescribeWorkspacesRequest: AWSEncodableShape {
        /// The identifier of the bundle. All WorkSpaces that are created from this bundle are retrieved. You cannot combine this parameter with any other filter.
        public let bundleId: String?
        /// The identifier of the directory. In addition, you can optionally specify a specific directory user (see UserName). You cannot combine this parameter with any other filter.
        public let directoryId: String?
        /// The maximum number of items to return.
        public let limit: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?
        /// The name of the directory user. You must specify this parameter with DirectoryId.
        public let userName: String?
        /// The identifiers of the WorkSpaces. You cannot combine this parameter with any other filter. Because the CreateWorkspaces operation is asynchronous, the identifier it returns is not immediately available. If you immediately call DescribeWorkspaces with this identifier, no information is returned.
        public let workspaceIds: [String]?
        /// The name of the user-decoupled WorkSpace.
        public let workspaceName: String?

        @inlinable
        public init(bundleId: String? = nil, directoryId: String? = nil, limit: Int? = nil, nextToken: String? = nil, userName: String? = nil, workspaceIds: [String]? = nil, workspaceName: String? = nil) {
            self.bundleId = bundleId
            self.directoryId = directoryId
            self.limit = limit
            self.nextToken = nextToken
            self.userName = userName
            self.workspaceIds = workspaceIds
            self.workspaceName = workspaceName
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.limit, name: "limit", parent: name, max: 25)
            try self.validate(self.limit, name: "limit", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
            try self.validate(self.userName, name: "userName", parent: name, max: 63)
            try self.validate(self.userName, name: "userName", parent: name, min: 1)
            try self.workspaceIds?.forEach {
                try validate($0, name: "workspaceIds[]", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
            }
            try self.validate(self.workspaceIds, name: "workspaceIds", parent: name, max: 25)
            try self.validate(self.workspaceIds, name: "workspaceIds", parent: name, min: 1)
            try self.validate(self.workspaceName, name: "workspaceName", parent: name, pattern: "^[a-zA-Z0-9_()][a-zA-Z0-9_.()-]{1,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case directoryId = "DirectoryId"
            case limit = "Limit"
            case nextToken = "NextToken"
            case userName = "UserName"
            case workspaceIds = "WorkspaceIds"
            case workspaceName = "WorkspaceName"
        }
    }

    public struct DescribeWorkspacesResult: AWSDecodableShape {
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?
        /// Information about the WorkSpaces. Because CreateWorkspaces is an asynchronous operation, some of the returned information could be incomplete.
        public let workspaces: [Workspace]?

        @inlinable
        public init(nextToken: String? = nil, workspaces: [Workspace]? = nil) {
            self.nextToken = nextToken
            self.workspaces = workspaces
        }

        private enum CodingKeys: String, CodingKey {
            case nextToken = "NextToken"
            case workspaces = "Workspaces"
        }
    }

    public struct DisassociateConnectionAliasRequest: AWSEncodableShape {
        /// The identifier of the connection alias to disassociate.
        public let aliasId: String

        @inlinable
        public init(aliasId: String) {
            self.aliasId = aliasId
        }

        public func validate(name: String) throws {
            try self.validate(self.aliasId, name: "aliasId", parent: name, max: 68)
            try self.validate(self.aliasId, name: "aliasId", parent: name, min: 13)
            try self.validate(self.aliasId, name: "aliasId", parent: name, pattern: "^wsca-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
        }
    }

    public struct DisassociateConnectionAliasResult: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateIpGroupsRequest: AWSEncodableShape {
        /// The identifier of the directory.
        public let directoryId: String
        /// The identifiers of one or more IP access control groups.
        public let groupIds: [String]

        @inlinable
        public init(directoryId: String, groupIds: [String]) {
            self.directoryId = directoryId
            self.groupIds = groupIds
        }

        public func validate(name: String) throws {
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.groupIds.forEach {
                try validate($0, name: "groupIds[]", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case directoryId = "DirectoryId"
            case groupIds = "GroupIds"
        }
    }

    public struct DisassociateIpGroupsResult: AWSDecodableShape {
        public init() {}
    }

    public struct DisassociateWorkspaceApplicationRequest: AWSEncodableShape {
        /// The identifier of the application.
        public let applicationId: String
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(applicationId: String, workspaceId: String) {
            self.applicationId = applicationId
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.applicationId, name: "applicationId", parent: name, pattern: "^wsa-[0-9a-z]{8,63}$")
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct DisassociateWorkspaceApplicationResult: AWSDecodableShape {
        /// Information about the targeted association.
        public let association: WorkspaceResourceAssociation?

        @inlinable
        public init(association: WorkspaceResourceAssociation? = nil) {
            self.association = association
        }

        private enum CodingKeys: String, CodingKey {
            case association = "Association"
        }
    }

    public struct ErrorDetails: AWSDecodableShape {
        /// Indicates the error code returned.
        public let errorCode: WorkspaceImageErrorDetailCode?
        /// The text of the error message related the error code.
        public let errorMessage: String?

        @inlinable
        public init(errorCode: WorkspaceImageErrorDetailCode? = nil, errorMessage: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
        }
    }

    public struct FailedCreateStandbyWorkspacesRequest: AWSDecodableShape {
        /// The error code that is returned if the standby WorkSpace could not be created.
        public let errorCode: String?
        /// The text of the error message that is returned if the standby WorkSpace could not be created.
        public let errorMessage: String?
        /// Information about the standby WorkSpace that could not be created.
        public let standbyWorkspaceRequest: StandbyWorkspace?

        @inlinable
        public init(errorCode: String? = nil, errorMessage: String? = nil, standbyWorkspaceRequest: StandbyWorkspace? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.standbyWorkspaceRequest = standbyWorkspaceRequest
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case standbyWorkspaceRequest = "StandbyWorkspaceRequest"
        }
    }

    public struct FailedCreateWorkspaceRequest: AWSDecodableShape {
        /// The error code that is returned if the WorkSpace cannot be created.
        public let errorCode: String?
        /// The text of the error message that is returned if the WorkSpace cannot be created.
        public let errorMessage: String?
        /// Information about the WorkSpace.
        public let workspaceRequest: WorkspaceRequest?

        @inlinable
        public init(errorCode: String? = nil, errorMessage: String? = nil, workspaceRequest: WorkspaceRequest? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.workspaceRequest = workspaceRequest
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case workspaceRequest = "WorkspaceRequest"
        }
    }

    public struct FailedWorkspaceChangeRequest: AWSDecodableShape {
        /// The error code that is returned if the WorkSpace cannot be rebooted.
        public let errorCode: String?
        /// The text of the error message that is returned if the WorkSpace cannot be rebooted.
        public let errorMessage: String?
        /// The identifier of the WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(errorCode: String? = nil, errorMessage: String? = nil, workspaceId: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.workspaceId = workspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct GetAccountLinkRequest: AWSEncodableShape {
        /// The identifier of the account link
        public let linkedAccountId: String?
        /// The identifier of the account to link.
        public let linkId: String?

        @inlinable
        public init(linkedAccountId: String? = nil, linkId: String? = nil) {
            self.linkedAccountId = linkedAccountId
            self.linkId = linkId
        }

        public func validate(name: String) throws {
            try self.validate(self.linkedAccountId, name: "linkedAccountId", parent: name, pattern: "^\\d{12}$")
            try self.validate(self.linkId, name: "linkId", parent: name, pattern: "^link-.{8,24}$")
        }

        private enum CodingKeys: String, CodingKey {
            case linkedAccountId = "LinkedAccountId"
            case linkId = "LinkId"
        }
    }

    public struct GetAccountLinkResult: AWSDecodableShape {
        /// The account link of the account link to retrieve.
        public let accountLink: AccountLink?

        @inlinable
        public init(accountLink: AccountLink? = nil) {
            self.accountLink = accountLink
        }

        private enum CodingKeys: String, CodingKey {
            case accountLink = "AccountLink"
        }
    }

    public struct GlobalAcceleratorForDirectory: AWSEncodableShape & AWSDecodableShape {
        /// Indicates if Global Accelerator for directory is enabled or disabled.
        public let mode: AGAModeForDirectoryEnum
        /// Indicates the preferred protocol for Global Accelerator.
        public let preferredProtocol: AGAPreferredProtocolForDirectory?

        @inlinable
        public init(mode: AGAModeForDirectoryEnum, preferredProtocol: AGAPreferredProtocolForDirectory? = nil) {
            self.mode = mode
            self.preferredProtocol = preferredProtocol
        }

        private enum CodingKeys: String, CodingKey {
            case mode = "Mode"
            case preferredProtocol = "PreferredProtocol"
        }
    }

    public struct GlobalAcceleratorForWorkSpace: AWSEncodableShape & AWSDecodableShape {
        /// Indicates if Global Accelerator for WorkSpaces is enabled, disabled,  or the same mode as the associated directory.
        public let mode: AGAModeForWorkSpaceEnum
        /// Indicates the preferred protocol for Global Accelerator.
        public let preferredProtocol: AGAPreferredProtocolForWorkSpace?

        @inlinable
        public init(mode: AGAModeForWorkSpaceEnum, preferredProtocol: AGAPreferredProtocolForWorkSpace? = nil) {
            self.mode = mode
            self.preferredProtocol = preferredProtocol
        }

        private enum CodingKeys: String, CodingKey {
            case mode = "Mode"
            case preferredProtocol = "PreferredProtocol"
        }
    }

    public struct IDCConfig: AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the application.
        public let applicationArn: String?
        /// The Amazon Resource Name (ARN) of the identity center instance.
        public let instanceArn: String?

        @inlinable
        public init(applicationArn: String? = nil, instanceArn: String? = nil) {
            self.applicationArn = applicationArn
            self.instanceArn = instanceArn
        }

        private enum CodingKeys: String, CodingKey {
            case applicationArn = "ApplicationArn"
            case instanceArn = "InstanceArn"
        }
    }

    public struct ImagePermission: AWSDecodableShape {
        /// The identifier of the Amazon Web Services account that an image has been shared with.
        public let sharedAccountId: String?

        @inlinable
        public init(sharedAccountId: String? = nil) {
            self.sharedAccountId = sharedAccountId
        }

        private enum CodingKeys: String, CodingKey {
            case sharedAccountId = "SharedAccountId"
        }
    }

    public struct ImageResourceAssociation: AWSDecodableShape {
        /// The identifier of the associated resource.
        public let associatedResourceId: String?
        /// The resource type of the associated resources.
        public let associatedResourceType: ImageAssociatedResourceType?
        /// The time the association is created.
        public let created: Date?
        /// The identifier of the image.
        public let imageId: String?
        /// The time the association status was last updated.
        public let lastUpdatedTime: Date?
        /// The status of the image resource association.
        public let state: AssociationState?
        /// The reason the association deployment failed.
        public let stateReason: AssociationStateReason?

        @inlinable
        public init(associatedResourceId: String? = nil, associatedResourceType: ImageAssociatedResourceType? = nil, created: Date? = nil, imageId: String? = nil, lastUpdatedTime: Date? = nil, state: AssociationState? = nil, stateReason: AssociationStateReason? = nil) {
            self.associatedResourceId = associatedResourceId
            self.associatedResourceType = associatedResourceType
            self.created = created
            self.imageId = imageId
            self.lastUpdatedTime = lastUpdatedTime
            self.state = state
            self.stateReason = stateReason
        }

        private enum CodingKeys: String, CodingKey {
            case associatedResourceId = "AssociatedResourceId"
            case associatedResourceType = "AssociatedResourceType"
            case created = "Created"
            case imageId = "ImageId"
            case lastUpdatedTime = "LastUpdatedTime"
            case state = "State"
            case stateReason = "StateReason"
        }
    }

    public struct ImportClientBrandingRequest: AWSEncodableShape {
        /// The branding information to import for Android devices.
        public let deviceTypeAndroid: DefaultImportClientBrandingAttributes?
        /// The branding information to import for iOS devices.
        public let deviceTypeIos: IosImportClientBrandingAttributes?
        /// The branding information to import for Linux devices.
        public let deviceTypeLinux: DefaultImportClientBrandingAttributes?
        /// The branding information to import for macOS devices.
        public let deviceTypeOsx: DefaultImportClientBrandingAttributes?
        /// The branding information to import for web access.
        public let deviceTypeWeb: DefaultImportClientBrandingAttributes?
        /// The branding information to import for Windows devices.
        public let deviceTypeWindows: DefaultImportClientBrandingAttributes?
        /// The directory identifier of the WorkSpace for which you want to import client branding.
        public let resourceId: String

        @inlinable
        public init(deviceTypeAndroid: DefaultImportClientBrandingAttributes? = nil, deviceTypeIos: IosImportClientBrandingAttributes? = nil, deviceTypeLinux: DefaultImportClientBrandingAttributes? = nil, deviceTypeOsx: DefaultImportClientBrandingAttributes? = nil, deviceTypeWeb: DefaultImportClientBrandingAttributes? = nil, deviceTypeWindows: DefaultImportClientBrandingAttributes? = nil, resourceId: String) {
            self.deviceTypeAndroid = deviceTypeAndroid
            self.deviceTypeIos = deviceTypeIos
            self.deviceTypeLinux = deviceTypeLinux
            self.deviceTypeOsx = deviceTypeOsx
            self.deviceTypeWeb = deviceTypeWeb
            self.deviceTypeWindows = deviceTypeWindows
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.deviceTypeAndroid?.validate(name: "\(name).deviceTypeAndroid")
            try self.deviceTypeIos?.validate(name: "\(name).deviceTypeIos")
            try self.deviceTypeLinux?.validate(name: "\(name).deviceTypeLinux")
            try self.deviceTypeOsx?.validate(name: "\(name).deviceTypeOsx")
            try self.deviceTypeWeb?.validate(name: "\(name).deviceTypeWeb")
            try self.deviceTypeWindows?.validate(name: "\(name).deviceTypeWindows")
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case deviceTypeAndroid = "DeviceTypeAndroid"
            case deviceTypeIos = "DeviceTypeIos"
            case deviceTypeLinux = "DeviceTypeLinux"
            case deviceTypeOsx = "DeviceTypeOsx"
            case deviceTypeWeb = "DeviceTypeWeb"
            case deviceTypeWindows = "DeviceTypeWindows"
            case resourceId = "ResourceId"
        }
    }

    public struct ImportClientBrandingResult: AWSDecodableShape {
        /// The branding information configured for Android devices.
        public let deviceTypeAndroid: DefaultClientBrandingAttributes?
        /// The branding information configured for iOS devices.
        public let deviceTypeIos: IosClientBrandingAttributes?
        /// The branding information configured for Linux devices.
        public let deviceTypeLinux: DefaultClientBrandingAttributes?
        /// The branding information configured for macOS devices.
        public let deviceTypeOsx: DefaultClientBrandingAttributes?
        /// The branding information configured for web access.
        public let deviceTypeWeb: DefaultClientBrandingAttributes?
        /// The branding information configured for Windows devices.
        public let deviceTypeWindows: DefaultClientBrandingAttributes?

        @inlinable
        public init(deviceTypeAndroid: DefaultClientBrandingAttributes? = nil, deviceTypeIos: IosClientBrandingAttributes? = nil, deviceTypeLinux: DefaultClientBrandingAttributes? = nil, deviceTypeOsx: DefaultClientBrandingAttributes? = nil, deviceTypeWeb: DefaultClientBrandingAttributes? = nil, deviceTypeWindows: DefaultClientBrandingAttributes? = nil) {
            self.deviceTypeAndroid = deviceTypeAndroid
            self.deviceTypeIos = deviceTypeIos
            self.deviceTypeLinux = deviceTypeLinux
            self.deviceTypeOsx = deviceTypeOsx
            self.deviceTypeWeb = deviceTypeWeb
            self.deviceTypeWindows = deviceTypeWindows
        }

        private enum CodingKeys: String, CodingKey {
            case deviceTypeAndroid = "DeviceTypeAndroid"
            case deviceTypeIos = "DeviceTypeIos"
            case deviceTypeLinux = "DeviceTypeLinux"
            case deviceTypeOsx = "DeviceTypeOsx"
            case deviceTypeWeb = "DeviceTypeWeb"
            case deviceTypeWindows = "DeviceTypeWindows"
        }
    }

    public struct ImportCustomWorkspaceImageRequest: AWSEncodableShape {
        /// The supported compute type for the WorkSpace image.
        public let computeType: ImageComputeType
        /// The description of the WorkSpace image.
        public let imageDescription: String
        /// The name of the WorkSpace image.
        public let imageName: String
        /// The options for image import source.
        public let imageSource: ImageSourceIdentifier
        /// The infrastructure configuration ARN that specifies how the WorkSpace image is built.
        public let infrastructureConfigurationArn: String
        /// The OS version for the WorkSpace image source.
        public let osVersion: OSVersion
        /// The platform for the WorkSpace image source.
        public let platform: Platform
        /// The supported protocol for the WorkSpace image. Windows 11 does not support PCOIP protocol.
        public let `protocol`: CustomImageProtocol
        /// The resource tags. Each WorkSpaces resource can have a maximum of 50 tags.
        public let tags: [Tag]?

        @inlinable
        public init(computeType: ImageComputeType, imageDescription: String, imageName: String, imageSource: ImageSourceIdentifier, infrastructureConfigurationArn: String, osVersion: OSVersion, platform: Platform, protocol: CustomImageProtocol, tags: [Tag]? = nil) {
            self.computeType = computeType
            self.imageDescription = imageDescription
            self.imageName = imageName
            self.imageSource = imageSource
            self.infrastructureConfigurationArn = infrastructureConfigurationArn
            self.osVersion = osVersion
            self.platform = platform
            self.`protocol` = `protocol`
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.imageDescription, name: "imageDescription", parent: name, max: 256)
            try self.validate(self.imageDescription, name: "imageDescription", parent: name, min: 1)
            try self.validate(self.imageDescription, name: "imageDescription", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.imageName, name: "imageName", parent: name, max: 64)
            try self.validate(self.imageName, name: "imageName", parent: name, min: 1)
            try self.validate(self.imageName, name: "imageName", parent: name, pattern: "^[a-zA-Z0-9_./()\\\\-]+$")
            try self.imageSource.validate(name: "\(name).imageSource")
            try self.validate(self.infrastructureConfigurationArn, name: "infrastructureConfigurationArn", parent: name, max: 2048)
            try self.validate(self.infrastructureConfigurationArn, name: "infrastructureConfigurationArn", parent: name, min: 1)
            try self.validate(self.infrastructureConfigurationArn, name: "infrastructureConfigurationArn", parent: name, pattern: "^arn:aws[^:]*:imagebuilder:[^:]+:(?:[0-9]{12}|aws):infrastructure-configuration/[a-z0-9-_]+$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case computeType = "ComputeType"
            case imageDescription = "ImageDescription"
            case imageName = "ImageName"
            case imageSource = "ImageSource"
            case infrastructureConfigurationArn = "InfrastructureConfigurationArn"
            case osVersion = "OsVersion"
            case platform = "Platform"
            case `protocol` = "Protocol"
            case tags = "Tags"
        }
    }

    public struct ImportCustomWorkspaceImageResult: AWSDecodableShape {
        /// The identifier of the WorkSpace image.
        public let imageId: String?
        /// The state of the WorkSpace image.
        public let state: CustomWorkspaceImageImportState?

        @inlinable
        public init(imageId: String? = nil, state: CustomWorkspaceImageImportState? = nil) {
            self.imageId = imageId
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
            case state = "State"
        }
    }

    public struct ImportWorkspaceImageRequest: AWSEncodableShape {
        /// If specified, the version of Microsoft Office to subscribe to. Valid only for Windows 10 and 11 BYOL images. For more information about subscribing to Office for BYOL images, see  Bring Your Own Windows Desktop Licenses.    Although this parameter is an array, only one item is allowed at this time.   During the image import process, non-GPU DCV (formerly WSP) WorkSpaces with Windows 11 support only Microsoft_Office_2019. GPU DCV (formerly WSP) WorkSpaces with Windows 11 do not support Office installation.
        public let applications: [Application]?
        /// The identifier of the EC2 image.
        public let ec2ImageId: String
        /// The description of the WorkSpace image.
        public let imageDescription: String
        /// The name of the WorkSpace image.
        public let imageName: String
        /// The ingestion process to be used when importing the image, depending on which protocol you want to use for your BYOL Workspace image, either PCoIP, WSP, or  bring your own protocol (BYOP). To use DCV, specify a value that ends in  _WSP. To use PCoIP, specify a value that does not end in _WSP.  To use BYOP, specify a value that ends in _BYOP. For non-GPU-enabled bundles (bundles other than Graphics or GraphicsPro), specify  BYOL_REGULAR, BYOL_REGULAR_WSP, or BYOL_REGULAR_BYOP,  depending on the protocol.  The BYOL_REGULAR_BYOP and BYOL_GRAPHICS_G4DN_BYOP values are only supported by Amazon WorkSpaces Core. Contact your account team to be allow-listed to use these values. For more information, see Amazon WorkSpaces Core.
        public let ingestionProcess: WorkspaceImageIngestionProcess
        /// The tags. Each WorkSpaces resource can have a maximum of 50 tags.
        public let tags: [Tag]?

        @inlinable
        public init(applications: [Application]? = nil, ec2ImageId: String, imageDescription: String, imageName: String, ingestionProcess: WorkspaceImageIngestionProcess, tags: [Tag]? = nil) {
            self.applications = applications
            self.ec2ImageId = ec2ImageId
            self.imageDescription = imageDescription
            self.imageName = imageName
            self.ingestionProcess = ingestionProcess
            self.tags = tags
        }

        public func validate(name: String) throws {
            try self.validate(self.applications, name: "applications", parent: name, max: 5)
            try self.validate(self.applications, name: "applications", parent: name, min: 1)
            try self.validate(self.ec2ImageId, name: "ec2ImageId", parent: name, pattern: "^ami\\-([a-f0-9]{8}|[a-f0-9]{17})$")
            try self.validate(self.imageDescription, name: "imageDescription", parent: name, max: 256)
            try self.validate(self.imageDescription, name: "imageDescription", parent: name, min: 1)
            try self.validate(self.imageDescription, name: "imageDescription", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.imageName, name: "imageName", parent: name, max: 64)
            try self.validate(self.imageName, name: "imageName", parent: name, min: 1)
            try self.validate(self.imageName, name: "imageName", parent: name, pattern: "^[a-zA-Z0-9_./()\\\\-]+$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case applications = "Applications"
            case ec2ImageId = "Ec2ImageId"
            case imageDescription = "ImageDescription"
            case imageName = "ImageName"
            case ingestionProcess = "IngestionProcess"
            case tags = "Tags"
        }
    }

    public struct ImportWorkspaceImageResult: AWSDecodableShape {
        /// The identifier of the WorkSpace image.
        public let imageId: String?

        @inlinable
        public init(imageId: String? = nil) {
            self.imageId = imageId
        }

        private enum CodingKeys: String, CodingKey {
            case imageId = "ImageId"
        }
    }

    public struct IosClientBrandingAttributes: AWSDecodableShape {
        /// The forgotten password link. This is the web address that users can go to if they forget the password for their WorkSpace.
        public let forgotPasswordLink: String?
        /// The login message. Specified as a key value pair, in which the key is a locale and the value is the localized message for that locale. The only key supported is en_US. The HTML tags supported include the following: a, b, blockquote, br, cite, code, dd, dl, dt, div, em,  i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul.
        public let loginMessage: [String: String]?
        /// The @2x version of the logo. This is the higher resolution display that offers a scale factor of 2.0 (or @2x). The only image format accepted is a binary data object that is  converted from a .png file.  For more information about iOS image size and resolution, see Image Size and Resolution  in the Apple Human Interface Guidelines.
        public let logo2xUrl: String?
        /// The @3x version of the logo. This is the higher resolution display that offers a scale factor of 3.0 (or @3x).The only image format accepted is a binary data object that is  converted from a .png file.  For more information about iOS image size and resolution, see Image Size and Resolution  in the Apple Human Interface Guidelines.
        public let logo3xUrl: String?
        /// The logo. This is the standard-resolution display that has a 1:1 pixel density  (or @1x), where one pixel is equal to one point. The only image format accepted is a binary data object that is converted from  a .png file.
        public let logoUrl: String?
        /// The support email. The company's customer support email address.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default email is workspaces-feedback@amazon.com.
        public let supportEmail: String?
        /// The support link. The link for the company's customer support page for their WorkSpace.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default support link is workspaces-feedback@amazon.com.
        public let supportLink: String?

        @inlinable
        public init(forgotPasswordLink: String? = nil, loginMessage: [String: String]? = nil, logo2xUrl: String? = nil, logo3xUrl: String? = nil, logoUrl: String? = nil, supportEmail: String? = nil, supportLink: String? = nil) {
            self.forgotPasswordLink = forgotPasswordLink
            self.loginMessage = loginMessage
            self.logo2xUrl = logo2xUrl
            self.logo3xUrl = logo3xUrl
            self.logoUrl = logoUrl
            self.supportEmail = supportEmail
            self.supportLink = supportLink
        }

        private enum CodingKeys: String, CodingKey {
            case forgotPasswordLink = "ForgotPasswordLink"
            case loginMessage = "LoginMessage"
            case logo2xUrl = "Logo2xUrl"
            case logo3xUrl = "Logo3xUrl"
            case logoUrl = "LogoUrl"
            case supportEmail = "SupportEmail"
            case supportLink = "SupportLink"
        }
    }

    public struct IosImportClientBrandingAttributes: AWSEncodableShape {
        /// The forgotten password link. This is the web address that users can go to if they forget the password for their WorkSpace.
        public let forgotPasswordLink: String?
        /// The login message. Specified as a key value pair, in which the key is a locale and the value is the localized message for that locale. The only key supported is en_US. The HTML tags supported include the following: a, b, blockquote, br, cite, code, dd, dl, dt, div, em,  i, li, ol, p, pre, q, small, span, strike, strong, sub, sup, u, ul.
        public let loginMessage: [String: String]?
        /// The logo. This is the standard-resolution display that has a 1:1 pixel density (or @1x), where one pixel is equal to one point. The only image format accepted is a binary data object that is converted  from a .png file.
        public let logo: AWSBase64Data?
        /// The @2x version of the logo. This is the higher resolution display that offers a scale factor of 2.0 (or @2x). The only image format accepted is a binary data object that is  converted from a .png file.  For more information about iOS image size and resolution, see Image Size and Resolution  in the Apple Human Interface Guidelines.
        public let logo2x: AWSBase64Data?
        /// The @3x version of the logo. This is the higher resolution display that offers a scale factor of 3.0 (or @3x). The only image format accepted is a binary data object that is  converted from a .png file.  For more information about iOS image size and resolution, see Image Size and Resolution  in the Apple Human Interface Guidelines.
        public let logo3x: AWSBase64Data?
        /// The support email. The company's customer support email address.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default email is workspaces-feedback@amazon.com.
        public let supportEmail: String?
        /// The support link. The link for the company's customer support page for their WorkSpace.    In each platform type, the SupportEmail and SupportLink parameters are mutually exclusive. You can specify one parameter for each platform type, but not both.   The default support link is workspaces-feedback@amazon.com.
        public let supportLink: String?

        @inlinable
        public init(forgotPasswordLink: String? = nil, loginMessage: [String: String]? = nil, logo: AWSBase64Data? = nil, logo2x: AWSBase64Data? = nil, logo3x: AWSBase64Data? = nil, supportEmail: String? = nil, supportLink: String? = nil) {
            self.forgotPasswordLink = forgotPasswordLink
            self.loginMessage = loginMessage
            self.logo = logo
            self.logo2x = logo2x
            self.logo3x = logo3x
            self.supportEmail = supportEmail
            self.supportLink = supportLink
        }

        public func validate(name: String) throws {
            try self.validate(self.forgotPasswordLink, name: "forgotPasswordLink", parent: name, max: 200)
            try self.validate(self.forgotPasswordLink, name: "forgotPasswordLink", parent: name, min: 1)
            try self.validate(self.forgotPasswordLink, name: "forgotPasswordLink", parent: name, pattern: "^(http|https)\\://\\S+$")
            try self.loginMessage?.forEach {
                try validate($0.key, name: "loginMessage.key", parent: name, max: 5)
                try validate($0.key, name: "loginMessage.key", parent: name, min: 5)
                try validate($0.key, name: "loginMessage.key", parent: name, pattern: "^[a-z]{2}_[A-Z]{2}$")
                try validate($0.value, name: "loginMessage[\"\($0.key)\"]", parent: name, max: 2000)
                try validate($0.value, name: "loginMessage[\"\($0.key)\"]", parent: name, pattern: "^.*$")
            }
            try self.validate(self.logo, name: "logo", parent: name, max: 447000)
            try self.validate(self.logo, name: "logo", parent: name, min: 1)
            try self.validate(self.logo2x, name: "logo2x", parent: name, max: 1770000)
            try self.validate(self.logo2x, name: "logo2x", parent: name, min: 1)
            try self.validate(self.logo3x, name: "logo3x", parent: name, max: 1770000)
            try self.validate(self.logo3x, name: "logo3x", parent: name, min: 1)
            try self.validate(self.supportEmail, name: "supportEmail", parent: name, max: 64)
            try self.validate(self.supportEmail, name: "supportEmail", parent: name, min: 6)
            try self.validate(self.supportEmail, name: "supportEmail", parent: name, pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$")
            try self.validate(self.supportLink, name: "supportLink", parent: name, max: 200)
            try self.validate(self.supportLink, name: "supportLink", parent: name, min: 1)
            try self.validate(self.supportLink, name: "supportLink", parent: name, pattern: "^(http|https)\\://\\S+$")
        }

        private enum CodingKeys: String, CodingKey {
            case forgotPasswordLink = "ForgotPasswordLink"
            case loginMessage = "LoginMessage"
            case logo = "Logo"
            case logo2x = "Logo2x"
            case logo3x = "Logo3x"
            case supportEmail = "SupportEmail"
            case supportLink = "SupportLink"
        }
    }

    public struct IpRuleItem: AWSEncodableShape & AWSDecodableShape {
        /// The IP address range, in CIDR notation.
        public let ipRule: String?
        /// The description.
        public let ruleDesc: String?

        @inlinable
        public init(ipRule: String? = nil, ruleDesc: String? = nil) {
            self.ipRule = ipRule
            self.ruleDesc = ruleDesc
        }

        private enum CodingKeys: String, CodingKey {
            case ipRule = "ipRule"
            case ruleDesc = "ruleDesc"
        }
    }

    public struct ListAccountLinksRequest: AWSEncodableShape {
        /// Filters the account based on their link status.
        public let linkStatusFilter: [AccountLinkStatusEnum]?
        /// The maximum number of accounts to return.
        public let maxResults: Int?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(linkStatusFilter: [AccountLinkStatusEnum]? = nil, maxResults: Int? = nil, nextToken: String? = nil) {
            self.linkStatusFilter = linkStatusFilter
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 25)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case linkStatusFilter = "LinkStatusFilter"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct ListAccountLinksResult: AWSDecodableShape {
        /// Information about the account links.
        public let accountLinks: [AccountLink]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(accountLinks: [AccountLink]? = nil, nextToken: String? = nil) {
            self.accountLinks = accountLinks
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case accountLinks = "AccountLinks"
            case nextToken = "NextToken"
        }
    }

    public struct ListAvailableManagementCidrRangesRequest: AWSEncodableShape {
        /// The IP address range to search. Specify an IP address range that is compatible with your network and in CIDR notation (that is, specify the range as an IPv4 CIDR block).
        public let managementCidrRangeConstraint: String
        /// The maximum number of items to return.
        public let maxResults: Int?
        /// If you received a NextToken from a previous call that was paginated, provide this token to receive the next set of results.
        public let nextToken: String?

        @inlinable
        public init(managementCidrRangeConstraint: String, maxResults: Int? = nil, nextToken: String? = nil) {
            self.managementCidrRangeConstraint = managementCidrRangeConstraint
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        public func validate(name: String) throws {
            try self.validate(self.managementCidrRangeConstraint, name: "managementCidrRangeConstraint", parent: name, pattern: "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\\/(3[0-2]|[1-2][0-9]|[0-9]))$")
            try self.validate(self.maxResults, name: "maxResults", parent: name, max: 5)
            try self.validate(self.maxResults, name: "maxResults", parent: name, min: 1)
            try self.validate(self.nextToken, name: "nextToken", parent: name, max: 2048)
            try self.validate(self.nextToken, name: "nextToken", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case managementCidrRangeConstraint = "ManagementCidrRangeConstraint"
            case maxResults = "MaxResults"
            case nextToken = "NextToken"
        }
    }

    public struct ListAvailableManagementCidrRangesResult: AWSDecodableShape {
        /// The list of available IP address ranges, specified as IPv4 CIDR blocks.
        public let managementCidrRanges: [String]?
        /// The token to use to retrieve the next page of results. This value is null when there are no more results to return.
        public let nextToken: String?

        @inlinable
        public init(managementCidrRanges: [String]? = nil, nextToken: String? = nil) {
            self.managementCidrRanges = managementCidrRanges
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case managementCidrRanges = "ManagementCidrRanges"
            case nextToken = "NextToken"
        }
    }

    public struct MicrosoftEntraConfig: AWSEncodableShape & AWSDecodableShape {
        /// The Amazon Resource Name (ARN) of the application config.
        public let applicationConfigSecretArn: String?
        /// The identifier of the tenant.
        public let tenantId: String?

        @inlinable
        public init(applicationConfigSecretArn: String? = nil, tenantId: String? = nil) {
            self.applicationConfigSecretArn = applicationConfigSecretArn
            self.tenantId = tenantId
        }

        public func validate(name: String) throws {
            try self.validate(self.applicationConfigSecretArn, name: "applicationConfigSecretArn", parent: name, pattern: "^arn:aws[a-z-]{0,7}:secretsmanager:[A-za-z0-9_/.-]{0,63}:[A-za-z0-9_/.-]{0,63}:secret:[A-Za-z0-9][A-za-z0-9_/.-]{8,519}$")
            try self.validate(self.tenantId, name: "tenantId", parent: name, pattern: "^[a-zA-Z0-9-]{1,100}$")
        }

        private enum CodingKeys: String, CodingKey {
            case applicationConfigSecretArn = "ApplicationConfigSecretArn"
            case tenantId = "TenantId"
        }
    }

    public struct MigrateWorkspaceRequest: AWSEncodableShape {
        /// The identifier of the target bundle type to migrate the WorkSpace to.
        public let bundleId: String
        /// The identifier of the WorkSpace to migrate from.
        public let sourceWorkspaceId: String

        @inlinable
        public init(bundleId: String, sourceWorkspaceId: String) {
            self.bundleId = bundleId
            self.sourceWorkspaceId = sourceWorkspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            try self.validate(self.sourceWorkspaceId, name: "sourceWorkspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case sourceWorkspaceId = "SourceWorkspaceId"
        }
    }

    public struct MigrateWorkspaceResult: AWSDecodableShape {
        /// The original identifier of the WorkSpace that is being migrated.
        public let sourceWorkspaceId: String?
        /// The new identifier of the WorkSpace that is being migrated. If the migration does not succeed, the target WorkSpace ID will not be used, and the WorkSpace will still have the original WorkSpace ID.
        public let targetWorkspaceId: String?

        @inlinable
        public init(sourceWorkspaceId: String? = nil, targetWorkspaceId: String? = nil) {
            self.sourceWorkspaceId = sourceWorkspaceId
            self.targetWorkspaceId = targetWorkspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case sourceWorkspaceId = "SourceWorkspaceId"
            case targetWorkspaceId = "TargetWorkspaceId"
        }
    }

    public struct ModificationState: AWSDecodableShape {
        /// The resource.
        public let resource: ModificationResourceEnum?
        /// The modification state.
        public let state: ModificationStateEnum?

        @inlinable
        public init(resource: ModificationResourceEnum? = nil, state: ModificationStateEnum? = nil) {
            self.resource = resource
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case resource = "Resource"
            case state = "State"
        }
    }

    public struct ModifyAccountRequest: AWSEncodableShape {
        /// The IP address range, specified as an IPv4 CIDR block, for the management network interface. Specify an IP address range that is compatible with your network and in CIDR notation (that is, specify the range as an IPv4 CIDR block). The CIDR block size must be /16 (for example, 203.0.113.25/16). It must also be specified as available by the ListAvailableManagementCidrRanges operation.
        public let dedicatedTenancyManagementCidrRange: String?
        /// The status of BYOL.
        public let dedicatedTenancySupport: DedicatedTenancySupportEnum?

        @inlinable
        public init(dedicatedTenancyManagementCidrRange: String? = nil, dedicatedTenancySupport: DedicatedTenancySupportEnum? = nil) {
            self.dedicatedTenancyManagementCidrRange = dedicatedTenancyManagementCidrRange
            self.dedicatedTenancySupport = dedicatedTenancySupport
        }

        public func validate(name: String) throws {
            try self.validate(self.dedicatedTenancyManagementCidrRange, name: "dedicatedTenancyManagementCidrRange", parent: name, pattern: "^(^([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.0\\.0)(\\/(16$))$")
        }

        private enum CodingKeys: String, CodingKey {
            case dedicatedTenancyManagementCidrRange = "DedicatedTenancyManagementCidrRange"
            case dedicatedTenancySupport = "DedicatedTenancySupport"
        }
    }

    public struct ModifyAccountResult: AWSDecodableShape {
        /// The text message to describe the status of BYOL modification.
        public let message: String?

        @inlinable
        public init(message: String? = nil) {
            self.message = message
        }

        private enum CodingKeys: String, CodingKey {
            case message = "Message"
        }
    }

    public struct ModifyCertificateBasedAuthPropertiesRequest: AWSEncodableShape {
        /// The properties of the certificate-based authentication.
        public let certificateBasedAuthProperties: CertificateBasedAuthProperties?
        /// The properties of the certificate-based authentication you want to delete.
        public let propertiesToDelete: [DeletableCertificateBasedAuthProperty]?
        /// The resource identifiers, in the form of directory IDs.
        public let resourceId: String

        @inlinable
        public init(certificateBasedAuthProperties: CertificateBasedAuthProperties? = nil, propertiesToDelete: [DeletableCertificateBasedAuthProperty]? = nil, resourceId: String) {
            self.certificateBasedAuthProperties = certificateBasedAuthProperties
            self.propertiesToDelete = propertiesToDelete
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.certificateBasedAuthProperties?.validate(name: "\(name).certificateBasedAuthProperties")
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case certificateBasedAuthProperties = "CertificateBasedAuthProperties"
            case propertiesToDelete = "PropertiesToDelete"
            case resourceId = "ResourceId"
        }
    }

    public struct ModifyCertificateBasedAuthPropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyClientPropertiesRequest: AWSEncodableShape {
        /// Information about the Amazon WorkSpaces client.
        public let clientProperties: ClientProperties
        /// The resource identifiers, in the form of directory IDs.
        public let resourceId: String

        @inlinable
        public init(clientProperties: ClientProperties, resourceId: String) {
            self.clientProperties = clientProperties
            self.resourceId = resourceId
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case clientProperties = "ClientProperties"
            case resourceId = "ResourceId"
        }
    }

    public struct ModifyClientPropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyEndpointEncryptionModeRequest: AWSEncodableShape {
        ///  The identifier of the directory.
        public let directoryId: String
        /// The encryption mode used for endpoint connections when streaming to WorkSpaces Personal or WorkSpace Pools.
        public let endpointEncryptionMode: EndpointEncryptionMode

        @inlinable
        public init(directoryId: String, endpointEncryptionMode: EndpointEncryptionMode) {
            self.directoryId = directoryId
            self.endpointEncryptionMode = endpointEncryptionMode
        }

        public func validate(name: String) throws {
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case directoryId = "DirectoryId"
            case endpointEncryptionMode = "EndpointEncryptionMode"
        }
    }

    public struct ModifyEndpointEncryptionModeResponse: AWSDecodableShape {
        public init() {}
    }

    public struct ModifySamlPropertiesRequest: AWSEncodableShape {
        /// The SAML properties to delete as part of your request. Specify one of the following options:    SAML_PROPERTIES_USER_ACCESS_URL to delete the user access URL.    SAML_PROPERTIES_RELAY_STATE_PARAMETER_NAME to delete the relay state parameter name.
        public let propertiesToDelete: [DeletableSamlProperty]?
        /// The directory identifier for which you want to configure SAML properties.
        public let resourceId: String
        /// The properties for configuring SAML 2.0 authentication.
        public let samlProperties: SamlProperties?

        @inlinable
        public init(propertiesToDelete: [DeletableSamlProperty]? = nil, resourceId: String, samlProperties: SamlProperties? = nil) {
            self.propertiesToDelete = propertiesToDelete
            self.resourceId = resourceId
            self.samlProperties = samlProperties
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.samlProperties?.validate(name: "\(name).samlProperties")
        }

        private enum CodingKeys: String, CodingKey {
            case propertiesToDelete = "PropertiesToDelete"
            case resourceId = "ResourceId"
            case samlProperties = "SamlProperties"
        }
    }

    public struct ModifySamlPropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifySelfservicePermissionsRequest: AWSEncodableShape {
        /// The identifier of the directory.
        public let resourceId: String
        /// The permissions to enable or disable self-service capabilities.
        public let selfservicePermissions: SelfservicePermissions

        @inlinable
        public init(resourceId: String, selfservicePermissions: SelfservicePermissions) {
            self.resourceId = resourceId
            self.selfservicePermissions = selfservicePermissions
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case selfservicePermissions = "SelfservicePermissions"
        }
    }

    public struct ModifySelfservicePermissionsResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyStreamingPropertiesRequest: AWSEncodableShape {
        /// The identifier of the resource.
        public let resourceId: String
        /// The streaming properties to configure.
        public let streamingProperties: StreamingProperties?

        @inlinable
        public init(resourceId: String, streamingProperties: StreamingProperties? = nil) {
            self.resourceId = resourceId
            self.streamingProperties = streamingProperties
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.streamingProperties?.validate(name: "\(name).streamingProperties")
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case streamingProperties = "StreamingProperties"
        }
    }

    public struct ModifyStreamingPropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyWorkspaceAccessPropertiesRequest: AWSEncodableShape {
        /// The identifier of the directory.
        public let resourceId: String
        /// The device types and operating systems to enable or disable for access.
        public let workspaceAccessProperties: WorkspaceAccessProperties

        @inlinable
        public init(resourceId: String, workspaceAccessProperties: WorkspaceAccessProperties) {
            self.resourceId = resourceId
            self.workspaceAccessProperties = workspaceAccessProperties
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.workspaceAccessProperties.validate(name: "\(name).workspaceAccessProperties")
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case workspaceAccessProperties = "WorkspaceAccessProperties"
        }
    }

    public struct ModifyWorkspaceAccessPropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyWorkspaceCreationPropertiesRequest: AWSEncodableShape {
        /// The identifier of the directory.
        public let resourceId: String
        /// The default properties for creating WorkSpaces.
        public let workspaceCreationProperties: WorkspaceCreationProperties

        @inlinable
        public init(resourceId: String, workspaceCreationProperties: WorkspaceCreationProperties) {
            self.resourceId = resourceId
            self.workspaceCreationProperties = workspaceCreationProperties
        }

        public func validate(name: String) throws {
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.workspaceCreationProperties.validate(name: "\(name).workspaceCreationProperties")
        }

        private enum CodingKeys: String, CodingKey {
            case resourceId = "ResourceId"
            case workspaceCreationProperties = "WorkspaceCreationProperties"
        }
    }

    public struct ModifyWorkspaceCreationPropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyWorkspacePropertiesRequest: AWSEncodableShape {
        /// Indicates the data replication status.
        public let dataReplication: DataReplication?
        /// The identifier of the WorkSpace.
        public let workspaceId: String
        /// The properties of the WorkSpace.
        public let workspaceProperties: WorkspaceProperties?

        @inlinable
        public init(dataReplication: DataReplication? = nil, workspaceId: String, workspaceProperties: WorkspaceProperties? = nil) {
            self.dataReplication = dataReplication
            self.workspaceId = workspaceId
            self.workspaceProperties = workspaceProperties
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case dataReplication = "DataReplication"
            case workspaceId = "WorkspaceId"
            case workspaceProperties = "WorkspaceProperties"
        }
    }

    public struct ModifyWorkspacePropertiesResult: AWSDecodableShape {
        public init() {}
    }

    public struct ModifyWorkspaceStateRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String
        /// The WorkSpace state.
        public let workspaceState: TargetWorkspaceState

        @inlinable
        public init(workspaceId: String, workspaceState: TargetWorkspaceState) {
            self.workspaceId = workspaceId
            self.workspaceState = workspaceState
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
            case workspaceState = "WorkspaceState"
        }
    }

    public struct ModifyWorkspaceStateResult: AWSDecodableShape {
        public init() {}
    }

    public struct NetworkAccessConfiguration: AWSDecodableShape {
        /// The resource identifier of the elastic network interface that is attached to instances in your  VPC. All network interfaces have the eni-xxxxxxxx resource identifier.
        public let eniId: String?
        /// The private IP address of the elastic network interface that is attached to instances in your VPC.
        public let eniPrivateIpAddress: String?

        @inlinable
        public init(eniId: String? = nil, eniPrivateIpAddress: String? = nil) {
            self.eniId = eniId
            self.eniPrivateIpAddress = eniPrivateIpAddress
        }

        private enum CodingKeys: String, CodingKey {
            case eniId = "EniId"
            case eniPrivateIpAddress = "EniPrivateIpAddress"
        }
    }

    public struct OperatingSystem: AWSDecodableShape {
        /// The operating system.
        public let type: OperatingSystemType?

        @inlinable
        public init(type: OperatingSystemType? = nil) {
            self.type = type
        }

        private enum CodingKeys: String, CodingKey {
            case type = "Type"
        }
    }

    public struct OperationNotSupportedException: AWSErrorShape {
        /// The exception error message.
        public let message: String?
        /// The exception error reason.
        public let reason: String?

        @inlinable
        public init(message: String? = nil, reason: String? = nil) {
            self.message = message
            self.reason = reason
        }

        private enum CodingKeys: String, CodingKey {
            case message = "message"
            case reason = "reason"
        }
    }

    public struct PendingCreateStandbyWorkspacesRequest: AWSDecodableShape {
        /// The identifier of the directory for the standby WorkSpace.
        public let directoryId: String?
        /// The operational state of the standby WorkSpace.
        public let state: WorkspaceState?
        /// Describes the standby WorkSpace that was created. Because this operation is asynchronous, the identifier returned is not immediately  available for use with other operations. For example, if you call   DescribeWorkspaces  before the WorkSpace is created, the information returned can be incomplete.
        public let userName: String?
        /// The identifier of the standby WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(directoryId: String? = nil, state: WorkspaceState? = nil, userName: String? = nil, workspaceId: String? = nil) {
            self.directoryId = directoryId
            self.state = state
            self.userName = userName
            self.workspaceId = workspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case directoryId = "DirectoryId"
            case state = "State"
            case userName = "UserName"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct RebootRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(workspaceId: String) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct RebootWorkspacesRequest: AWSEncodableShape {
        /// The WorkSpaces to reboot. You can specify up to 25 WorkSpaces.
        public let rebootWorkspaceRequests: [RebootRequest]

        @inlinable
        public init(rebootWorkspaceRequests: [RebootRequest]) {
            self.rebootWorkspaceRequests = rebootWorkspaceRequests
        }

        public func validate(name: String) throws {
            try self.rebootWorkspaceRequests.forEach {
                try $0.validate(name: "\(name).rebootWorkspaceRequests[]")
            }
            try self.validate(self.rebootWorkspaceRequests, name: "rebootWorkspaceRequests", parent: name, max: 25)
            try self.validate(self.rebootWorkspaceRequests, name: "rebootWorkspaceRequests", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case rebootWorkspaceRequests = "RebootWorkspaceRequests"
        }
    }

    public struct RebootWorkspacesResult: AWSDecodableShape {
        /// Information about the WorkSpaces that could not be rebooted.
        public let failedRequests: [FailedWorkspaceChangeRequest]?

        @inlinable
        public init(failedRequests: [FailedWorkspaceChangeRequest]? = nil) {
            self.failedRequests = failedRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedRequests = "FailedRequests"
        }
    }

    public struct RebuildRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(workspaceId: String) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct RebuildWorkspacesRequest: AWSEncodableShape {
        /// The WorkSpace to rebuild. You can specify a single WorkSpace.
        public let rebuildWorkspaceRequests: [RebuildRequest]

        @inlinable
        public init(rebuildWorkspaceRequests: [RebuildRequest]) {
            self.rebuildWorkspaceRequests = rebuildWorkspaceRequests
        }

        public func validate(name: String) throws {
            try self.rebuildWorkspaceRequests.forEach {
                try $0.validate(name: "\(name).rebuildWorkspaceRequests[]")
            }
            try self.validate(self.rebuildWorkspaceRequests, name: "rebuildWorkspaceRequests", parent: name, max: 1)
            try self.validate(self.rebuildWorkspaceRequests, name: "rebuildWorkspaceRequests", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case rebuildWorkspaceRequests = "RebuildWorkspaceRequests"
        }
    }

    public struct RebuildWorkspacesResult: AWSDecodableShape {
        /// Information about the WorkSpace that could not be rebuilt.
        public let failedRequests: [FailedWorkspaceChangeRequest]?

        @inlinable
        public init(failedRequests: [FailedWorkspaceChangeRequest]? = nil) {
            self.failedRequests = failedRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedRequests = "FailedRequests"
        }
    }

    public struct RegisterWorkspaceDirectoryRequest: AWSEncodableShape {
        /// The active directory config of the directory.
        public let activeDirectoryConfig: ActiveDirectoryConfig?
        /// The identifier of the directory. You cannot register a directory if it does not have a status of Active. If the directory does not have a status of Active, you will receive an InvalidResourceStateException error. If you have already registered the maximum number of directories that you can register with Amazon WorkSpaces, you will receive a ResourceLimitExceededException error. Deregister directories that you are not using for WorkSpaces, and try again.
        public let directoryId: String?
        /// Indicates whether self-service capabilities are enabled or disabled.
        public let enableSelfService: Bool?
        /// The Amazon Resource Name (ARN) of the identity center instance.
        public let idcInstanceArn: String?
        /// The details about Microsoft Entra config.
        public let microsoftEntraConfig: MicrosoftEntraConfig?
        /// The identifiers of the subnets for your virtual private cloud (VPC). Make sure that the subnets are in supported Availability Zones. The subnets must also be in separate Availability Zones. If these conditions are not met, you will receive an OperationNotSupportedException error.
        public let subnetIds: [String]?
        /// The tags associated with the directory.
        public let tags: [Tag]?
        /// Indicates whether your WorkSpace directory is dedicated or shared. To use Bring Your Own License (BYOL) images, this value must be set to DEDICATED and your Amazon Web Services account must be enabled for BYOL. If your account has not been enabled for BYOL, you will receive an InvalidParameterValuesException error. For more information about BYOL images, see Bring Your Own Windows Desktop Images.
        public let tenancy: Tenancy?
        /// The type of identity management the user is using.
        public let userIdentityType: UserIdentityType?
        /// Description of the directory to register.
        public let workspaceDirectoryDescription: String?
        /// The name of the directory to register.
        public let workspaceDirectoryName: String?
        /// Indicates whether the directory's WorkSpace type is personal or pools.
        public let workspaceType: WorkspaceType?

        @inlinable
        public init(activeDirectoryConfig: ActiveDirectoryConfig? = nil, directoryId: String? = nil, enableSelfService: Bool? = nil, idcInstanceArn: String? = nil, microsoftEntraConfig: MicrosoftEntraConfig? = nil, subnetIds: [String]? = nil, tags: [Tag]? = nil, tenancy: Tenancy? = nil, userIdentityType: UserIdentityType? = nil, workspaceDirectoryDescription: String? = nil, workspaceDirectoryName: String? = nil, workspaceType: WorkspaceType? = nil) {
            self.activeDirectoryConfig = activeDirectoryConfig
            self.directoryId = directoryId
            self.enableSelfService = enableSelfService
            self.idcInstanceArn = idcInstanceArn
            self.microsoftEntraConfig = microsoftEntraConfig
            self.subnetIds = subnetIds
            self.tags = tags
            self.tenancy = tenancy
            self.userIdentityType = userIdentityType
            self.workspaceDirectoryDescription = workspaceDirectoryDescription
            self.workspaceDirectoryName = workspaceDirectoryName
            self.workspaceType = workspaceType
        }

        public func validate(name: String) throws {
            try self.activeDirectoryConfig?.validate(name: "\(name).activeDirectoryConfig")
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.idcInstanceArn, name: "idcInstanceArn", parent: name, pattern: "^arn:aws[a-z-]{0,7}:[A-Za-z0-9][A-za-z0-9_/.-]{0,62}:[A-za-z0-9_/.-]{0,63}:[A-za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.\\\\-]{0,1023}$")
            try self.microsoftEntraConfig?.validate(name: "\(name).microsoftEntraConfig")
            try self.subnetIds?.forEach {
                try validate($0, name: "subnetIds[]", parent: name, max: 24)
                try validate($0, name: "subnetIds[]", parent: name, min: 15)
                try validate($0, name: "subnetIds[]", parent: name, pattern: "^(subnet-([0-9a-f]{8}|[0-9a-f]{17}))$")
            }
            try self.validate(self.subnetIds, name: "subnetIds", parent: name, max: 2)
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.workspaceDirectoryDescription, name: "workspaceDirectoryDescription", parent: name, pattern: "^([a-zA-Z0-9_])[\\\\a-zA-Z0-9_@#%*+=:?./!\\s-]{1,255}$")
            try self.validate(self.workspaceDirectoryName, name: "workspaceDirectoryName", parent: name, pattern: "^[a-zA-Z0-9][a-zA-Z0-9_.\\s-]{1,64}$")
        }

        private enum CodingKeys: String, CodingKey {
            case activeDirectoryConfig = "ActiveDirectoryConfig"
            case directoryId = "DirectoryId"
            case enableSelfService = "EnableSelfService"
            case idcInstanceArn = "IdcInstanceArn"
            case microsoftEntraConfig = "MicrosoftEntraConfig"
            case subnetIds = "SubnetIds"
            case tags = "Tags"
            case tenancy = "Tenancy"
            case userIdentityType = "UserIdentityType"
            case workspaceDirectoryDescription = "WorkspaceDirectoryDescription"
            case workspaceDirectoryName = "WorkspaceDirectoryName"
            case workspaceType = "WorkspaceType"
        }
    }

    public struct RegisterWorkspaceDirectoryResult: AWSDecodableShape {
        /// The identifier of the directory.
        public let directoryId: String?
        /// The registration status of the WorkSpace directory.
        public let state: WorkspaceDirectoryState?

        @inlinable
        public init(directoryId: String? = nil, state: WorkspaceDirectoryState? = nil) {
            self.directoryId = directoryId
            self.state = state
        }

        private enum CodingKeys: String, CodingKey {
            case directoryId = "DirectoryId"
            case state = "State"
        }
    }

    public struct RejectAccountLinkInvitationRequest: AWSEncodableShape {
        /// The client token of the account link invitation to reject.
        public let clientToken: String?
        /// The identifier of the account link
        public let linkId: String

        @inlinable
        public init(clientToken: String? = nil, linkId: String) {
            self.clientToken = clientToken
            self.linkId = linkId
        }

        public func validate(name: String) throws {
            try self.validate(self.clientToken, name: "clientToken", parent: name, pattern: "^.{1,64}$")
            try self.validate(self.linkId, name: "linkId", parent: name, pattern: "^link-.{8,24}$")
        }

        private enum CodingKeys: String, CodingKey {
            case clientToken = "ClientToken"
            case linkId = "LinkId"
        }
    }

    public struct RejectAccountLinkInvitationResult: AWSDecodableShape {
        /// Information about the account link.
        public let accountLink: AccountLink?

        @inlinable
        public init(accountLink: AccountLink? = nil) {
            self.accountLink = accountLink
        }

        private enum CodingKeys: String, CodingKey {
            case accountLink = "AccountLink"
        }
    }

    public struct RelatedWorkspaceProperties: AWSDecodableShape {
        /// The Region of the related WorkSpace.
        public let region: String?
        /// Indicates the state of the WorkSpace.
        public let state: WorkspaceState?
        /// Indicates the type of WorkSpace.
        public let type: StandbyWorkspaceRelationshipType?
        /// The identifier of the related WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(region: String? = nil, state: WorkspaceState? = nil, type: StandbyWorkspaceRelationshipType? = nil, workspaceId: String? = nil) {
            self.region = region
            self.state = state
            self.type = type
            self.workspaceId = workspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case region = "Region"
            case state = "State"
            case type = "Type"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct ResourceInUseException: AWSErrorShape {
        public let message: String?
        /// The ID of the resource that is in use.
        public let resourceId: String?

        @inlinable
        public init(message: String? = nil, resourceId: String? = nil) {
            self.message = message
            self.resourceId = resourceId
        }

        private enum CodingKeys: String, CodingKey {
            case message = "message"
            case resourceId = "ResourceId"
        }
    }

    public struct ResourceNotFoundException: AWSErrorShape {
        /// The resource could not be found.
        public let message: String?
        /// The ID of the resource that could not be found.
        public let resourceId: String?

        @inlinable
        public init(message: String? = nil, resourceId: String? = nil) {
            self.message = message
            self.resourceId = resourceId
        }

        private enum CodingKeys: String, CodingKey {
            case message = "message"
            case resourceId = "ResourceId"
        }
    }

    public struct ResourceUnavailableException: AWSErrorShape {
        /// The exception error message.
        public let message: String?
        /// The identifier of the resource that is not available.
        public let resourceId: String?

        @inlinable
        public init(message: String? = nil, resourceId: String? = nil) {
            self.message = message
            self.resourceId = resourceId
        }

        private enum CodingKeys: String, CodingKey {
            case message = "message"
            case resourceId = "ResourceId"
        }
    }

    public struct RestoreWorkspaceRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(workspaceId: String) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct RestoreWorkspaceResult: AWSDecodableShape {
        public init() {}
    }

    public struct RevokeIpRulesRequest: AWSEncodableShape {
        /// The identifier of the group.
        public let groupId: String
        /// The rules to remove from the group.
        public let userRules: [String]

        @inlinable
        public init(groupId: String, userRules: [String]) {
            self.groupId = groupId
            self.userRules = userRules
        }

        public func validate(name: String) throws {
            try self.validate(self.groupId, name: "groupId", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case groupId = "GroupId"
            case userRules = "UserRules"
        }
    }

    public struct RevokeIpRulesResult: AWSDecodableShape {
        public init() {}
    }

    public struct RootStorage: AWSEncodableShape & AWSDecodableShape {
        /// The size of the root volume.
        public let capacity: String

        @inlinable
        public init(capacity: String) {
            self.capacity = capacity
        }

        public func validate(name: String) throws {
            try self.validate(self.capacity, name: "capacity", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case capacity = "Capacity"
        }
    }

    public struct SamlProperties: AWSEncodableShape & AWSDecodableShape {
        /// The relay state parameter name supported by the SAML 2.0 identity provider (IdP). When the end user is redirected to  the user access URL from the WorkSpaces client application, this relay state parameter name is appended as a query  parameter to the URL along with the relay state endpoint to return the user to the client application session. To use SAML 2.0 authentication with WorkSpaces, the IdP must support IdP-initiated deep linking for the relay state  URL. Consult your IdP documentation for more information.
        public let relayStateParameterName: String?
        /// Indicates the status of SAML 2.0 authentication. These statuses include the following.   If the setting is DISABLED, end users will be directed to login with their directory credentials.   If the setting is ENABLED, end users will be directed to login via the user access URL. Users attempting  to connect to WorkSpaces from a client application that does not support SAML 2.0 authentication will not be able to  connect.   If the setting is ENABLED_WITH_DIRECTORY_LOGIN_FALLBACK, end users will be directed to login via the user  access URL on supported client applications, but will not prevent clients that do not support SAML 2.0 authentication  from connecting as if SAML 2.0 authentication was disabled.
        public let status: SamlStatusEnum?
        /// The SAML 2.0 identity provider (IdP) user access URL is the URL a user would navigate to in their web browser in  order to federate from the IdP and directly access the application, without any SAML 2.0 service provider (SP)  bindings.
        public let userAccessUrl: String?

        @inlinable
        public init(relayStateParameterName: String? = nil, status: SamlStatusEnum? = nil, userAccessUrl: String? = nil) {
            self.relayStateParameterName = relayStateParameterName
            self.status = status
            self.userAccessUrl = userAccessUrl
        }

        public func validate(name: String) throws {
            try self.validate(self.relayStateParameterName, name: "relayStateParameterName", parent: name, min: 1)
            try self.validate(self.userAccessUrl, name: "userAccessUrl", parent: name, max: 200)
            try self.validate(self.userAccessUrl, name: "userAccessUrl", parent: name, min: 8)
            try self.validate(self.userAccessUrl, name: "userAccessUrl", parent: name, pattern: "^(http|https)\\://\\S+$")
        }

        private enum CodingKeys: String, CodingKey {
            case relayStateParameterName = "RelayStateParameterName"
            case status = "Status"
            case userAccessUrl = "UserAccessUrl"
        }
    }

    public struct SelfservicePermissions: AWSEncodableShape & AWSDecodableShape {
        /// Specifies whether users can change the compute type (bundle) for their WorkSpace.
        public let changeComputeType: ReconnectEnum?
        /// Specifies whether users can increase the volume size of the drives on their WorkSpace.
        public let increaseVolumeSize: ReconnectEnum?
        /// Specifies whether users can rebuild the operating system of a WorkSpace to its original state.
        public let rebuildWorkspace: ReconnectEnum?
        /// Specifies whether users can restart their WorkSpace.
        public let restartWorkspace: ReconnectEnum?
        /// Specifies whether users can switch the running mode of their WorkSpace.
        public let switchRunningMode: ReconnectEnum?

        @inlinable
        public init(changeComputeType: ReconnectEnum? = nil, increaseVolumeSize: ReconnectEnum? = nil, rebuildWorkspace: ReconnectEnum? = nil, restartWorkspace: ReconnectEnum? = nil, switchRunningMode: ReconnectEnum? = nil) {
            self.changeComputeType = changeComputeType
            self.increaseVolumeSize = increaseVolumeSize
            self.rebuildWorkspace = rebuildWorkspace
            self.restartWorkspace = restartWorkspace
            self.switchRunningMode = switchRunningMode
        }

        private enum CodingKeys: String, CodingKey {
            case changeComputeType = "ChangeComputeType"
            case increaseVolumeSize = "IncreaseVolumeSize"
            case rebuildWorkspace = "RebuildWorkspace"
            case restartWorkspace = "RestartWorkspace"
            case switchRunningMode = "SwitchRunningMode"
        }
    }

    public struct Snapshot: AWSDecodableShape {
        /// The time when the snapshot was created.
        public let snapshotTime: Date?

        @inlinable
        public init(snapshotTime: Date? = nil) {
            self.snapshotTime = snapshotTime
        }

        private enum CodingKeys: String, CodingKey {
            case snapshotTime = "SnapshotTime"
        }
    }

    public struct StandbyWorkspace: AWSEncodableShape & AWSDecodableShape {
        /// Indicates whether data replication is enabled, and if enabled, the type of data replication.
        public let dataReplication: DataReplication?
        /// The identifier of the directory for the standby WorkSpace.
        public let directoryId: String
        /// The identifier of the standby WorkSpace.
        public let primaryWorkspaceId: String
        /// The tags associated with the standby WorkSpace.
        public let tags: [Tag]?
        /// The volume encryption key of the standby WorkSpace.
        public let volumeEncryptionKey: String?

        @inlinable
        public init(dataReplication: DataReplication? = nil, directoryId: String, primaryWorkspaceId: String, tags: [Tag]? = nil, volumeEncryptionKey: String? = nil) {
            self.dataReplication = dataReplication
            self.directoryId = directoryId
            self.primaryWorkspaceId = primaryWorkspaceId
            self.tags = tags
            self.volumeEncryptionKey = volumeEncryptionKey
        }

        public func validate(name: String) throws {
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.primaryWorkspaceId, name: "primaryWorkspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
        }

        private enum CodingKeys: String, CodingKey {
            case dataReplication = "DataReplication"
            case directoryId = "DirectoryId"
            case primaryWorkspaceId = "PrimaryWorkspaceId"
            case tags = "Tags"
            case volumeEncryptionKey = "VolumeEncryptionKey"
        }
    }

    public struct StandbyWorkspacesProperties: AWSDecodableShape {
        /// Indicates whether data replication is enabled, and if enabled, the type of data replication.
        public let dataReplication: DataReplication?
        /// The date and time at which the last successful snapshot was taken of the  primary WorkSpace used for replicating data.
        public let recoverySnapshotTime: Date?
        /// The identifier of the standby WorkSpace
        public let standbyWorkspaceId: String?

        @inlinable
        public init(dataReplication: DataReplication? = nil, recoverySnapshotTime: Date? = nil, standbyWorkspaceId: String? = nil) {
            self.dataReplication = dataReplication
            self.recoverySnapshotTime = recoverySnapshotTime
            self.standbyWorkspaceId = standbyWorkspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case dataReplication = "DataReplication"
            case recoverySnapshotTime = "RecoverySnapshotTime"
            case standbyWorkspaceId = "StandbyWorkspaceId"
        }
    }

    public struct StartRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(workspaceId: String? = nil) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct StartWorkspacesPoolRequest: AWSEncodableShape {
        /// The identifier of the pool.
        public let poolId: String

        @inlinable
        public init(poolId: String) {
            self.poolId = poolId
        }

        public func validate(name: String) throws {
            try self.validate(self.poolId, name: "poolId", parent: name, pattern: "^wspool-[0-9a-z]{9}$")
        }

        private enum CodingKeys: String, CodingKey {
            case poolId = "PoolId"
        }
    }

    public struct StartWorkspacesPoolResult: AWSDecodableShape {
        public init() {}
    }

    public struct StartWorkspacesRequest: AWSEncodableShape {
        /// The WorkSpaces to start. You can specify up to 25 WorkSpaces.
        public let startWorkspaceRequests: [StartRequest]

        @inlinable
        public init(startWorkspaceRequests: [StartRequest]) {
            self.startWorkspaceRequests = startWorkspaceRequests
        }

        public func validate(name: String) throws {
            try self.startWorkspaceRequests.forEach {
                try $0.validate(name: "\(name).startWorkspaceRequests[]")
            }
            try self.validate(self.startWorkspaceRequests, name: "startWorkspaceRequests", parent: name, max: 25)
            try self.validate(self.startWorkspaceRequests, name: "startWorkspaceRequests", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case startWorkspaceRequests = "StartWorkspaceRequests"
        }
    }

    public struct StartWorkspacesResult: AWSDecodableShape {
        /// Information about the WorkSpaces that could not be started.
        public let failedRequests: [FailedWorkspaceChangeRequest]?

        @inlinable
        public init(failedRequests: [FailedWorkspaceChangeRequest]? = nil) {
            self.failedRequests = failedRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedRequests = "FailedRequests"
        }
    }

    public struct StopRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(workspaceId: String? = nil) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct StopWorkspacesPoolRequest: AWSEncodableShape {
        /// The identifier of the pool.
        public let poolId: String

        @inlinable
        public init(poolId: String) {
            self.poolId = poolId
        }

        public func validate(name: String) throws {
            try self.validate(self.poolId, name: "poolId", parent: name, pattern: "^wspool-[0-9a-z]{9}$")
        }

        private enum CodingKeys: String, CodingKey {
            case poolId = "PoolId"
        }
    }

    public struct StopWorkspacesPoolResult: AWSDecodableShape {
        public init() {}
    }

    public struct StopWorkspacesRequest: AWSEncodableShape {
        /// The WorkSpaces to stop. You can specify up to 25 WorkSpaces.
        public let stopWorkspaceRequests: [StopRequest]

        @inlinable
        public init(stopWorkspaceRequests: [StopRequest]) {
            self.stopWorkspaceRequests = stopWorkspaceRequests
        }

        public func validate(name: String) throws {
            try self.stopWorkspaceRequests.forEach {
                try $0.validate(name: "\(name).stopWorkspaceRequests[]")
            }
            try self.validate(self.stopWorkspaceRequests, name: "stopWorkspaceRequests", parent: name, max: 25)
            try self.validate(self.stopWorkspaceRequests, name: "stopWorkspaceRequests", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case stopWorkspaceRequests = "StopWorkspaceRequests"
        }
    }

    public struct StopWorkspacesResult: AWSDecodableShape {
        /// Information about the WorkSpaces that could not be stopped.
        public let failedRequests: [FailedWorkspaceChangeRequest]?

        @inlinable
        public init(failedRequests: [FailedWorkspaceChangeRequest]? = nil) {
            self.failedRequests = failedRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedRequests = "FailedRequests"
        }
    }

    public struct StorageConnector: AWSEncodableShape & AWSDecodableShape {
        /// The type of connector used to save user files.
        public let connectorType: StorageConnectorTypeEnum
        /// Indicates if the storage connetor is enabled or disabled.
        public let status: StorageConnectorStatusEnum

        @inlinable
        public init(connectorType: StorageConnectorTypeEnum, status: StorageConnectorStatusEnum) {
            self.connectorType = connectorType
            self.status = status
        }

        private enum CodingKeys: String, CodingKey {
            case connectorType = "ConnectorType"
            case status = "Status"
        }
    }

    public struct StreamingProperties: AWSEncodableShape & AWSDecodableShape {
        /// Indicates the Global Accelerator properties.
        public let globalAccelerator: GlobalAcceleratorForDirectory?
        /// Indicates the storage connector used
        public let storageConnectors: [StorageConnector]?
        /// Indicates the type of preferred protocol for the streaming experience.
        public let streamingExperiencePreferredProtocol: StreamingExperiencePreferredProtocolEnum?
        /// Indicates the permission settings asscoiated with the user.
        public let userSettings: [UserSetting]?

        @inlinable
        public init(globalAccelerator: GlobalAcceleratorForDirectory? = nil, storageConnectors: [StorageConnector]? = nil, streamingExperiencePreferredProtocol: StreamingExperiencePreferredProtocolEnum? = nil, userSettings: [UserSetting]? = nil) {
            self.globalAccelerator = globalAccelerator
            self.storageConnectors = storageConnectors
            self.streamingExperiencePreferredProtocol = streamingExperiencePreferredProtocol
            self.userSettings = userSettings
        }

        public func validate(name: String) throws {
            try self.validate(self.storageConnectors, name: "storageConnectors", parent: name, min: 1)
            try self.userSettings?.forEach {
                try $0.validate(name: "\(name).userSettings[]")
            }
            try self.validate(self.userSettings, name: "userSettings", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case globalAccelerator = "GlobalAccelerator"
            case storageConnectors = "StorageConnectors"
            case streamingExperiencePreferredProtocol = "StreamingExperiencePreferredProtocol"
            case userSettings = "UserSettings"
        }
    }

    public struct Tag: AWSEncodableShape & AWSDecodableShape {
        /// The key of the tag.
        public let key: String
        /// The value of the tag.
        public let value: String?

        @inlinable
        public init(key: String, value: String? = nil) {
            self.key = key
            self.value = value
        }

        public func validate(name: String) throws {
            try self.validate(self.key, name: "key", parent: name, max: 127)
            try self.validate(self.key, name: "key", parent: name, min: 1)
            try self.validate(self.value, name: "value", parent: name, max: 255)
        }

        private enum CodingKeys: String, CodingKey {
            case key = "Key"
            case value = "Value"
        }
    }

    public struct TerminateRequest: AWSEncodableShape {
        /// The identifier of the WorkSpace.
        public let workspaceId: String

        @inlinable
        public init(workspaceId: String) {
            self.workspaceId = workspaceId
        }

        public func validate(name: String) throws {
            try self.validate(self.workspaceId, name: "workspaceId", parent: name, pattern: "^ws-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case workspaceId = "WorkspaceId"
        }
    }

    public struct TerminateWorkspacesPoolRequest: AWSEncodableShape {
        /// The identifier of the pool.
        public let poolId: String

        @inlinable
        public init(poolId: String) {
            self.poolId = poolId
        }

        public func validate(name: String) throws {
            try self.validate(self.poolId, name: "poolId", parent: name, pattern: "^wspool-[0-9a-z]{9}$")
        }

        private enum CodingKeys: String, CodingKey {
            case poolId = "PoolId"
        }
    }

    public struct TerminateWorkspacesPoolResult: AWSDecodableShape {
        public init() {}
    }

    public struct TerminateWorkspacesPoolSessionRequest: AWSEncodableShape {
        /// The identifier of the pool session.
        public let sessionId: String

        @inlinable
        public init(sessionId: String) {
            self.sessionId = sessionId
        }

        public func validate(name: String) throws {
            try self.validate(self.sessionId, name: "sessionId", parent: name, max: 36)
            try self.validate(self.sessionId, name: "sessionId", parent: name, min: 36)
            try self.validate(self.sessionId, name: "sessionId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case sessionId = "SessionId"
        }
    }

    public struct TerminateWorkspacesPoolSessionResult: AWSDecodableShape {
        public init() {}
    }

    public struct TerminateWorkspacesRequest: AWSEncodableShape {
        /// The WorkSpaces to terminate. You can specify up to 25 WorkSpaces.
        public let terminateWorkspaceRequests: [TerminateRequest]

        @inlinable
        public init(terminateWorkspaceRequests: [TerminateRequest]) {
            self.terminateWorkspaceRequests = terminateWorkspaceRequests
        }

        public func validate(name: String) throws {
            try self.terminateWorkspaceRequests.forEach {
                try $0.validate(name: "\(name).terminateWorkspaceRequests[]")
            }
            try self.validate(self.terminateWorkspaceRequests, name: "terminateWorkspaceRequests", parent: name, max: 25)
            try self.validate(self.terminateWorkspaceRequests, name: "terminateWorkspaceRequests", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case terminateWorkspaceRequests = "TerminateWorkspaceRequests"
        }
    }

    public struct TerminateWorkspacesResult: AWSDecodableShape {
        /// Information about the WorkSpaces that could not be terminated.
        public let failedRequests: [FailedWorkspaceChangeRequest]?

        @inlinable
        public init(failedRequests: [FailedWorkspaceChangeRequest]? = nil) {
            self.failedRequests = failedRequests
        }

        private enum CodingKeys: String, CodingKey {
            case failedRequests = "FailedRequests"
        }
    }

    public struct TimeoutSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the amount of time, in seconds, that a streaming session remains active after users disconnect.  If users try to reconnect to the streaming session after a disconnection or network interruption  within the time set, they are connected to their previous session. Otherwise, they are connected  to a new session with a new streaming instance.
        public let disconnectTimeoutInSeconds: Int?
        /// The amount of time in seconds a connection will stay active while idle.
        public let idleDisconnectTimeoutInSeconds: Int?
        /// Specifies the maximum amount of time, in seconds, that a streaming session can remain active.  If users are still connected to a streaming instance five minutes before this limit is reached,  they are prompted to save any open documents before being disconnected. After this time elapses,  the instance is terminated and replaced by a new instance.
        public let maxUserDurationInSeconds: Int?

        @inlinable
        public init(disconnectTimeoutInSeconds: Int? = nil, idleDisconnectTimeoutInSeconds: Int? = nil, maxUserDurationInSeconds: Int? = nil) {
            self.disconnectTimeoutInSeconds = disconnectTimeoutInSeconds
            self.idleDisconnectTimeoutInSeconds = idleDisconnectTimeoutInSeconds
            self.maxUserDurationInSeconds = maxUserDurationInSeconds
        }

        public func validate(name: String) throws {
            try self.validate(self.disconnectTimeoutInSeconds, name: "disconnectTimeoutInSeconds", parent: name, max: 36000)
            try self.validate(self.disconnectTimeoutInSeconds, name: "disconnectTimeoutInSeconds", parent: name, min: 60)
            try self.validate(self.idleDisconnectTimeoutInSeconds, name: "idleDisconnectTimeoutInSeconds", parent: name, max: 36000)
            try self.validate(self.idleDisconnectTimeoutInSeconds, name: "idleDisconnectTimeoutInSeconds", parent: name, min: 0)
            try self.validate(self.maxUserDurationInSeconds, name: "maxUserDurationInSeconds", parent: name, max: 432000)
            try self.validate(self.maxUserDurationInSeconds, name: "maxUserDurationInSeconds", parent: name, min: 600)
        }

        private enum CodingKeys: String, CodingKey {
            case disconnectTimeoutInSeconds = "DisconnectTimeoutInSeconds"
            case idleDisconnectTimeoutInSeconds = "IdleDisconnectTimeoutInSeconds"
            case maxUserDurationInSeconds = "MaxUserDurationInSeconds"
        }
    }

    public struct UpdateConnectClientAddInRequest: AWSEncodableShape {
        /// The identifier of the client add-in to update.
        public let addInId: String
        /// The name of the client add-in.
        public let name: String?
        /// The directory identifier for which the client add-in is configured.
        public let resourceId: String
        /// The endpoint URL of the Amazon Connect client add-in.
        public let url: String?

        @inlinable
        public init(addInId: String, name: String? = nil, resourceId: String, url: String? = nil) {
            self.addInId = addInId
            self.name = name
            self.resourceId = resourceId
            self.url = url
        }

        public func validate(name: String) throws {
            try self.validate(self.addInId, name: "addInId", parent: name, max: 36)
            try self.validate(self.addInId, name: "addInId", parent: name, min: 36)
            try self.validate(self.addInId, name: "addInId", parent: name, pattern: "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$")
            try self.validate(self.name, name: "name", parent: name, max: 64)
            try self.validate(self.name, name: "name", parent: name, min: 1)
            try self.validate(self.name, name: "name", parent: name, pattern: "^.*$")
            try self.validate(self.resourceId, name: "resourceId", parent: name, max: 65)
            try self.validate(self.resourceId, name: "resourceId", parent: name, min: 10)
            try self.validate(self.resourceId, name: "resourceId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.url, name: "url", parent: name, max: 1024)
            try self.validate(self.url, name: "url", parent: name, min: 1)
            try self.validate(self.url, name: "url", parent: name, pattern: "^(http|https)\\://\\S+$")
        }

        private enum CodingKeys: String, CodingKey {
            case addInId = "AddInId"
            case name = "Name"
            case resourceId = "ResourceId"
            case url = "URL"
        }
    }

    public struct UpdateConnectClientAddInResult: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateConnectionAliasPermissionRequest: AWSEncodableShape {
        /// The identifier of the connection alias that you want to update permissions for.
        public let aliasId: String
        /// Indicates whether to share or unshare the connection alias with the specified Amazon Web Services account.
        public let connectionAliasPermission: ConnectionAliasPermission

        @inlinable
        public init(aliasId: String, connectionAliasPermission: ConnectionAliasPermission) {
            self.aliasId = aliasId
            self.connectionAliasPermission = connectionAliasPermission
        }

        public func validate(name: String) throws {
            try self.validate(self.aliasId, name: "aliasId", parent: name, max: 68)
            try self.validate(self.aliasId, name: "aliasId", parent: name, min: 13)
            try self.validate(self.aliasId, name: "aliasId", parent: name, pattern: "^wsca-[0-9a-z]{8,63}$")
            try self.connectionAliasPermission.validate(name: "\(name).connectionAliasPermission")
        }

        private enum CodingKeys: String, CodingKey {
            case aliasId = "AliasId"
            case connectionAliasPermission = "ConnectionAliasPermission"
        }
    }

    public struct UpdateConnectionAliasPermissionResult: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateResult: AWSDecodableShape {
        /// A description of whether updates for the WorkSpace image are pending or available.
        public let description: String?
        /// Indicates whether updated drivers or other components are available for the specified WorkSpace image.
        public let updateAvailable: Bool?

        @inlinable
        public init(description: String? = nil, updateAvailable: Bool? = nil) {
            self.description = description
            self.updateAvailable = updateAvailable
        }

        private enum CodingKeys: String, CodingKey {
            case description = "Description"
            case updateAvailable = "UpdateAvailable"
        }
    }

    public struct UpdateRulesOfIpGroupRequest: AWSEncodableShape {
        /// The identifier of the group.
        public let groupId: String
        /// One or more rules.
        public let userRules: [IpRuleItem]

        @inlinable
        public init(groupId: String, userRules: [IpRuleItem]) {
            self.groupId = groupId
            self.userRules = userRules
        }

        public func validate(name: String) throws {
            try self.validate(self.groupId, name: "groupId", parent: name, pattern: "^wsipg-[0-9a-z]{8,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case groupId = "GroupId"
            case userRules = "UserRules"
        }
    }

    public struct UpdateRulesOfIpGroupResult: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWorkspaceBundleRequest: AWSEncodableShape {
        /// The identifier of the bundle.
        public let bundleId: String?
        /// The identifier of the image.
        public let imageId: String?

        @inlinable
        public init(bundleId: String? = nil, imageId: String? = nil) {
            self.bundleId = bundleId
            self.imageId = imageId
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case imageId = "ImageId"
        }
    }

    public struct UpdateWorkspaceBundleResult: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWorkspaceImagePermissionRequest: AWSEncodableShape {
        /// The permission to copy the image. This permission can be revoked only after an image has been shared.
        public let allowCopyImage: Bool
        /// The identifier of the image.
        public let imageId: String
        /// The identifier of the Amazon Web Services account to share or unshare the image with.  Before sharing the image, confirm that you are sharing to the correct Amazon Web Services account ID.
        public let sharedAccountId: String

        @inlinable
        public init(allowCopyImage: Bool, imageId: String, sharedAccountId: String) {
            self.allowCopyImage = allowCopyImage
            self.imageId = imageId
            self.sharedAccountId = sharedAccountId
        }

        public func validate(name: String) throws {
            try self.validate(self.imageId, name: "imageId", parent: name, pattern: "^wsi-[0-9a-z]{9,63}$")
            try self.validate(self.sharedAccountId, name: "sharedAccountId", parent: name, pattern: "^\\d{12}$")
        }

        private enum CodingKeys: String, CodingKey {
            case allowCopyImage = "AllowCopyImage"
            case imageId = "ImageId"
            case sharedAccountId = "SharedAccountId"
        }
    }

    public struct UpdateWorkspaceImagePermissionResult: AWSDecodableShape {
        public init() {}
    }

    public struct UpdateWorkspacesPoolRequest: AWSEncodableShape {
        /// The persistent application settings for users in the pool.
        public let applicationSettings: ApplicationSettingsRequest?
        /// The identifier of the bundle.
        public let bundleId: String?
        /// The desired capacity for the pool.
        public let capacity: Capacity?
        /// Describes the specified pool to update.
        public let description: String?
        /// The identifier of the directory.
        public let directoryId: String?
        /// The identifier of the specified pool to update.
        public let poolId: String
        /// The desired running mode for the pool. The running mode can only be updated when the pool is in a stopped state.
        public let runningMode: PoolsRunningMode?
        /// Indicates the timeout settings of the specified pool.
        public let timeoutSettings: TimeoutSettings?

        @inlinable
        public init(applicationSettings: ApplicationSettingsRequest? = nil, bundleId: String? = nil, capacity: Capacity? = nil, description: String? = nil, directoryId: String? = nil, poolId: String, runningMode: PoolsRunningMode? = nil, timeoutSettings: TimeoutSettings? = nil) {
            self.applicationSettings = applicationSettings
            self.bundleId = bundleId
            self.capacity = capacity
            self.description = description
            self.directoryId = directoryId
            self.poolId = poolId
            self.runningMode = runningMode
            self.timeoutSettings = timeoutSettings
        }

        public func validate(name: String) throws {
            try self.applicationSettings?.validate(name: "\(name).applicationSettings")
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            try self.capacity?.validate(name: "\(name).capacity")
            try self.validate(self.description, name: "description", parent: name, max: 255)
            try self.validate(self.description, name: "description", parent: name, min: 1)
            try self.validate(self.description, name: "description", parent: name, pattern: "^[a-zA-Z0-9_./() -]+$")
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.validate(self.poolId, name: "poolId", parent: name, pattern: "^wspool-[0-9a-z]{9}$")
            try self.timeoutSettings?.validate(name: "\(name).timeoutSettings")
        }

        private enum CodingKeys: String, CodingKey {
            case applicationSettings = "ApplicationSettings"
            case bundleId = "BundleId"
            case capacity = "Capacity"
            case description = "Description"
            case directoryId = "DirectoryId"
            case poolId = "PoolId"
            case runningMode = "RunningMode"
            case timeoutSettings = "TimeoutSettings"
        }
    }

    public struct UpdateWorkspacesPoolResult: AWSDecodableShape {
        /// Describes the specified pool.
        public let workspacesPool: WorkspacesPool?

        @inlinable
        public init(workspacesPool: WorkspacesPool? = nil) {
            self.workspacesPool = workspacesPool
        }

        private enum CodingKeys: String, CodingKey {
            case workspacesPool = "WorkspacesPool"
        }
    }

    public struct UserSetting: AWSEncodableShape & AWSDecodableShape {
        /// Indicates the type of action.
        public let action: UserSettingActionEnum
        /// Indicates the maximum character length for the specified user setting.
        public let maximumLength: Int?
        /// Indicates if the setting is enabled or disabled.
        public let permission: UserSettingPermissionEnum

        @inlinable
        public init(action: UserSettingActionEnum, maximumLength: Int? = nil, permission: UserSettingPermissionEnum) {
            self.action = action
            self.maximumLength = maximumLength
            self.permission = permission
        }

        public func validate(name: String) throws {
            try self.validate(self.maximumLength, name: "maximumLength", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case action = "Action"
            case maximumLength = "MaximumLength"
            case permission = "Permission"
        }
    }

    public struct UserStorage: AWSEncodableShape & AWSDecodableShape {
        /// The size of the user volume.
        public let capacity: String

        @inlinable
        public init(capacity: String) {
            self.capacity = capacity
        }

        public func validate(name: String) throws {
            try self.validate(self.capacity, name: "capacity", parent: name, min: 1)
        }

        private enum CodingKeys: String, CodingKey {
            case capacity = "Capacity"
        }
    }

    public struct WorkSpaceApplication: AWSDecodableShape {
        /// The identifier of the application.
        public let applicationId: String?
        /// The time the application is created.
        public let created: Date?
        /// The description of the WorkSpace application.
        public let description: String?
        /// The license availability for the applications.
        public let licenseType: WorkSpaceApplicationLicenseType?
        /// The name of the WorkSpace application.
        public let name: String?
        /// The owner of the WorkSpace application.
        public let owner: String?
        /// The status of WorkSpace application.
        public let state: WorkSpaceApplicationState?
        /// The supported compute types of the WorkSpace application.
        public let supportedComputeTypeNames: [Compute]?
        /// The supported operating systems of the WorkSpace application.
        public let supportedOperatingSystemNames: [OperatingSystemName]?

        @inlinable
        public init(applicationId: String? = nil, created: Date? = nil, description: String? = nil, licenseType: WorkSpaceApplicationLicenseType? = nil, name: String? = nil, owner: String? = nil, state: WorkSpaceApplicationState? = nil, supportedComputeTypeNames: [Compute]? = nil, supportedOperatingSystemNames: [OperatingSystemName]? = nil) {
            self.applicationId = applicationId
            self.created = created
            self.description = description
            self.licenseType = licenseType
            self.name = name
            self.owner = owner
            self.state = state
            self.supportedComputeTypeNames = supportedComputeTypeNames
            self.supportedOperatingSystemNames = supportedOperatingSystemNames
        }

        private enum CodingKeys: String, CodingKey {
            case applicationId = "ApplicationId"
            case created = "Created"
            case description = "Description"
            case licenseType = "LicenseType"
            case name = "Name"
            case owner = "Owner"
            case state = "State"
            case supportedComputeTypeNames = "SupportedComputeTypeNames"
            case supportedOperatingSystemNames = "SupportedOperatingSystemNames"
        }
    }

    public struct WorkSpaceApplicationDeployment: AWSDecodableShape {
        /// The associations between the applications and the associated resources.
        public let associations: [WorkspaceResourceAssociation]?

        @inlinable
        public init(associations: [WorkspaceResourceAssociation]? = nil) {
            self.associations = associations
        }

        private enum CodingKeys: String, CodingKey {
            case associations = "Associations"
        }
    }

    public struct Workspace: AWSDecodableShape {
        /// The identifier of the bundle used to create the WorkSpace.
        public let bundleId: String?
        /// The name of the WorkSpace, as seen by the operating system. The format of this name varies. For more information, see  Launch a WorkSpace.
        public let computerName: String?
        /// Indicates the settings of the data replication.
        public let dataReplicationSettings: DataReplicationSettings?
        /// The identifier of the Directory Service directory for the WorkSpace.
        public let directoryId: String?
        /// The error code that is returned if the WorkSpace cannot be created.
        public let errorCode: String?
        /// The text of the error message that is returned if the WorkSpace cannot be created.
        public let errorMessage: String?
        /// The IP address of the WorkSpace.
        public let ipAddress: String?
        /// The modification states of the WorkSpace.
        public let modificationStates: [ModificationState]?
        /// The standby WorkSpace or primary WorkSpace related to the specified WorkSpace.
        public let relatedWorkspaces: [RelatedWorkspaceProperties]?
        /// Indicates whether the data stored on the root volume is encrypted.
        public let rootVolumeEncryptionEnabled: Bool?
        /// The properties of the standby WorkSpace
        public let standbyWorkspacesProperties: [StandbyWorkspacesProperties]?
        /// The operational state of the WorkSpace.    PENDING – The WorkSpace is in a waiting state (for example, the WorkSpace is being created).    AVAILABLE – The WorkSpace is running and has passed the health checks.    IMPAIRED – Refer to UNHEALTHY state.    UNHEALTHY – The WorkSpace is not responding to health checks.    REBOOTING – The WorkSpace is being rebooted (restarted).    STARTING – The WorkSpace is starting up and health checks are being run.    REBUILDING – The WorkSpace is being rebuilt.    RESTORING – The WorkSpace is being restored.    MAINTENANCE – The WorkSpace is undergoing scheduled maintenance by Amazon Web Services.    ADMIN_MAINTENANCE  – The WorkSpace is undergoing maintenance by the WorkSpaces administrator.    TERMINATING – The WorkSpace is being deleted.    TERMINATED – The WorkSpace has been deleted.    SUSPENDED – The WorkSpace has been suspended for image creation.    UPDATING – The WorkSpace is undergoing an update.    STOPPING – The WorkSpace is being stopped.    STOPPED – The WorkSpace has been stopped.    ERROR  – The WorkSpace is an error state (for example, an error occurred during startup).    After a WorkSpace is terminated, the TERMINATED state is returned only briefly before the WorkSpace directory metadata is cleaned up, so this state is rarely returned. To confirm that a WorkSpace is terminated, check for the WorkSpace ID by using  DescribeWorkSpaces. If the WorkSpace ID isn't returned, then the WorkSpace has been successfully terminated.
        public let state: WorkspaceState?
        /// The identifier of the subnet for the WorkSpace.
        public let subnetId: String?
        /// The user for the WorkSpace.
        public let userName: String?
        /// Indicates whether the data stored on the user volume is encrypted.
        public let userVolumeEncryptionEnabled: Bool?
        /// The ARN of the symmetric KMS key used to encrypt data stored on your WorkSpace. Amazon WorkSpaces does not support asymmetric KMS keys.
        public let volumeEncryptionKey: String?
        /// The identifier of the WorkSpace.
        public let workspaceId: String?
        /// The name of the user-decoupled WorkSpace.
        public let workspaceName: String?
        /// The properties of the WorkSpace.
        public let workspaceProperties: WorkspaceProperties?

        @inlinable
        public init(bundleId: String? = nil, computerName: String? = nil, dataReplicationSettings: DataReplicationSettings? = nil, directoryId: String? = nil, errorCode: String? = nil, errorMessage: String? = nil, ipAddress: String? = nil, modificationStates: [ModificationState]? = nil, relatedWorkspaces: [RelatedWorkspaceProperties]? = nil, rootVolumeEncryptionEnabled: Bool? = nil, standbyWorkspacesProperties: [StandbyWorkspacesProperties]? = nil, state: WorkspaceState? = nil, subnetId: String? = nil, userName: String? = nil, userVolumeEncryptionEnabled: Bool? = nil, volumeEncryptionKey: String? = nil, workspaceId: String? = nil, workspaceName: String? = nil, workspaceProperties: WorkspaceProperties? = nil) {
            self.bundleId = bundleId
            self.computerName = computerName
            self.dataReplicationSettings = dataReplicationSettings
            self.directoryId = directoryId
            self.errorCode = errorCode
            self.errorMessage = errorMessage
            self.ipAddress = ipAddress
            self.modificationStates = modificationStates
            self.relatedWorkspaces = relatedWorkspaces
            self.rootVolumeEncryptionEnabled = rootVolumeEncryptionEnabled
            self.standbyWorkspacesProperties = standbyWorkspacesProperties
            self.state = state
            self.subnetId = subnetId
            self.userName = userName
            self.userVolumeEncryptionEnabled = userVolumeEncryptionEnabled
            self.volumeEncryptionKey = volumeEncryptionKey
            self.workspaceId = workspaceId
            self.workspaceName = workspaceName
            self.workspaceProperties = workspaceProperties
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case computerName = "ComputerName"
            case dataReplicationSettings = "DataReplicationSettings"
            case directoryId = "DirectoryId"
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
            case ipAddress = "IpAddress"
            case modificationStates = "ModificationStates"
            case relatedWorkspaces = "RelatedWorkspaces"
            case rootVolumeEncryptionEnabled = "RootVolumeEncryptionEnabled"
            case standbyWorkspacesProperties = "StandbyWorkspacesProperties"
            case state = "State"
            case subnetId = "SubnetId"
            case userName = "UserName"
            case userVolumeEncryptionEnabled = "UserVolumeEncryptionEnabled"
            case volumeEncryptionKey = "VolumeEncryptionKey"
            case workspaceId = "WorkspaceId"
            case workspaceName = "WorkspaceName"
            case workspaceProperties = "WorkspaceProperties"
        }
    }

    public struct WorkspaceAccessProperties: AWSEncodableShape & AWSDecodableShape {
        /// Specifies the configuration for accessing the WorkSpace.
        public let accessEndpointConfig: AccessEndpointConfig?
        /// Indicates whether users can use Android and Android-compatible Chrome OS devices to access their WorkSpaces.
        public let deviceTypeAndroid: AccessPropertyValue?
        /// Indicates whether users can use Chromebooks to access their WorkSpaces.
        public let deviceTypeChromeOs: AccessPropertyValue?
        /// Indicates whether users can use iOS devices to access their WorkSpaces.
        public let deviceTypeIos: AccessPropertyValue?
        /// Indicates whether users can use Linux clients to access their WorkSpaces.
        public let deviceTypeLinux: AccessPropertyValue?
        /// Indicates whether users can use macOS clients to access their WorkSpaces.
        public let deviceTypeOsx: AccessPropertyValue?
        /// Indicates whether users can access their WorkSpaces through a web browser.
        public let deviceTypeWeb: AccessPropertyValue?
        /// Indicates whether users can use Windows clients to access their WorkSpaces.
        public let deviceTypeWindows: AccessPropertyValue?
        /// Indicates whether users can access their WorkSpaces through a WorkSpaces Thin Client.
        public let deviceTypeWorkSpacesThinClient: AccessPropertyValue?
        /// Indicates whether users can use zero client devices to access their WorkSpaces.
        public let deviceTypeZeroClient: AccessPropertyValue?

        @inlinable
        public init(accessEndpointConfig: AccessEndpointConfig? = nil, deviceTypeAndroid: AccessPropertyValue? = nil, deviceTypeChromeOs: AccessPropertyValue? = nil, deviceTypeIos: AccessPropertyValue? = nil, deviceTypeLinux: AccessPropertyValue? = nil, deviceTypeOsx: AccessPropertyValue? = nil, deviceTypeWeb: AccessPropertyValue? = nil, deviceTypeWindows: AccessPropertyValue? = nil, deviceTypeWorkSpacesThinClient: AccessPropertyValue? = nil, deviceTypeZeroClient: AccessPropertyValue? = nil) {
            self.accessEndpointConfig = accessEndpointConfig
            self.deviceTypeAndroid = deviceTypeAndroid
            self.deviceTypeChromeOs = deviceTypeChromeOs
            self.deviceTypeIos = deviceTypeIos
            self.deviceTypeLinux = deviceTypeLinux
            self.deviceTypeOsx = deviceTypeOsx
            self.deviceTypeWeb = deviceTypeWeb
            self.deviceTypeWindows = deviceTypeWindows
            self.deviceTypeWorkSpacesThinClient = deviceTypeWorkSpacesThinClient
            self.deviceTypeZeroClient = deviceTypeZeroClient
        }

        public func validate(name: String) throws {
            try self.accessEndpointConfig?.validate(name: "\(name).accessEndpointConfig")
        }

        private enum CodingKeys: String, CodingKey {
            case accessEndpointConfig = "AccessEndpointConfig"
            case deviceTypeAndroid = "DeviceTypeAndroid"
            case deviceTypeChromeOs = "DeviceTypeChromeOs"
            case deviceTypeIos = "DeviceTypeIos"
            case deviceTypeLinux = "DeviceTypeLinux"
            case deviceTypeOsx = "DeviceTypeOsx"
            case deviceTypeWeb = "DeviceTypeWeb"
            case deviceTypeWindows = "DeviceTypeWindows"
            case deviceTypeWorkSpacesThinClient = "DeviceTypeWorkSpacesThinClient"
            case deviceTypeZeroClient = "DeviceTypeZeroClient"
        }
    }

    public struct WorkspaceBundle: AWSDecodableShape {
        /// The identifier of the bundle.
        public let bundleId: String?
        /// The type of WorkSpace bundle.
        public let bundleType: BundleType?
        /// The compute type of the bundle. For more information, see  Amazon WorkSpaces Bundles.
        public let computeType: ComputeType?
        /// The time when the bundle was created.
        public let creationTime: Date?
        /// The description of the bundle.
        public let description: String?
        /// The identifier of the image that was used to create the bundle.
        public let imageId: String?
        /// The last time that the bundle was updated.
        public let lastUpdatedTime: Date?
        /// The name of the bundle.
        public let name: String?
        /// The owner of the bundle. This is the account identifier of the owner, or AMAZON if the bundle is provided by Amazon Web Services.
        public let owner: String?
        /// The size of the root volume.
        public let rootStorage: RootStorage?
        /// The state of the WorkSpace bundle.
        public let state: WorkspaceBundleState?
        /// The size of the user volume.
        public let userStorage: UserStorage?

        @inlinable
        public init(bundleId: String? = nil, bundleType: BundleType? = nil, computeType: ComputeType? = nil, creationTime: Date? = nil, description: String? = nil, imageId: String? = nil, lastUpdatedTime: Date? = nil, name: String? = nil, owner: String? = nil, rootStorage: RootStorage? = nil, state: WorkspaceBundleState? = nil, userStorage: UserStorage? = nil) {
            self.bundleId = bundleId
            self.bundleType = bundleType
            self.computeType = computeType
            self.creationTime = creationTime
            self.description = description
            self.imageId = imageId
            self.lastUpdatedTime = lastUpdatedTime
            self.name = name
            self.owner = owner
            self.rootStorage = rootStorage
            self.state = state
            self.userStorage = userStorage
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case bundleType = "BundleType"
            case computeType = "ComputeType"
            case creationTime = "CreationTime"
            case description = "Description"
            case imageId = "ImageId"
            case lastUpdatedTime = "LastUpdatedTime"
            case name = "Name"
            case owner = "Owner"
            case rootStorage = "RootStorage"
            case state = "State"
            case userStorage = "UserStorage"
        }
    }

    public struct WorkspaceConnectionStatus: AWSDecodableShape {
        /// The connection state of the WorkSpace. The connection state is unknown if the WorkSpace is stopped.
        public let connectionState: ConnectionState?
        /// The timestamp of the connection status check.
        public let connectionStateCheckTimestamp: Date?
        /// The timestamp of the last known user connection.
        public let lastKnownUserConnectionTimestamp: Date?
        /// The identifier of the WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(connectionState: ConnectionState? = nil, connectionStateCheckTimestamp: Date? = nil, lastKnownUserConnectionTimestamp: Date? = nil, workspaceId: String? = nil) {
            self.connectionState = connectionState
            self.connectionStateCheckTimestamp = connectionStateCheckTimestamp
            self.lastKnownUserConnectionTimestamp = lastKnownUserConnectionTimestamp
            self.workspaceId = workspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case connectionState = "ConnectionState"
            case connectionStateCheckTimestamp = "ConnectionStateCheckTimestamp"
            case lastKnownUserConnectionTimestamp = "LastKnownUserConnectionTimestamp"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct WorkspaceCreationProperties: AWSEncodableShape {
        /// The identifier of your custom security group.
        public let customSecurityGroupId: String?
        /// The default organizational unit (OU) for your WorkSpaces directories. This string must be the full Lightweight Directory Access Protocol (LDAP) distinguished name for the target domain and OU. It must be in the form "OU=value,DC=value,DC=value", where value is any string of characters, and the number of domain components (DCs) is two or more. For example, OU=WorkSpaces_machines,DC=machines,DC=example,DC=com.     To avoid errors, certain characters in the distinguished name must be escaped. For more information, see  Distinguished Names in the Microsoft documentation.   The API doesn't validate whether the OU exists.
        public let defaultOu: String?
        /// Indicates whether internet access is enabled for your WorkSpaces.
        public let enableInternetAccess: Bool?
        /// Indicates whether maintenance mode is enabled for your WorkSpaces. For more information, see WorkSpace Maintenance.
        public let enableMaintenanceMode: Bool?
        /// Indicates the IAM role ARN of the instance.
        public let instanceIamRoleArn: String?
        /// Indicates whether users are local administrators of their WorkSpaces.
        public let userEnabledAsLocalAdministrator: Bool?

        @inlinable
        public init(customSecurityGroupId: String? = nil, defaultOu: String? = nil, enableInternetAccess: Bool? = nil, enableMaintenanceMode: Bool? = nil, instanceIamRoleArn: String? = nil, userEnabledAsLocalAdministrator: Bool? = nil) {
            self.customSecurityGroupId = customSecurityGroupId
            self.defaultOu = defaultOu
            self.enableInternetAccess = enableInternetAccess
            self.enableMaintenanceMode = enableMaintenanceMode
            self.instanceIamRoleArn = instanceIamRoleArn
            self.userEnabledAsLocalAdministrator = userEnabledAsLocalAdministrator
        }

        public func validate(name: String) throws {
            try self.validate(self.customSecurityGroupId, name: "customSecurityGroupId", parent: name, max: 20)
            try self.validate(self.customSecurityGroupId, name: "customSecurityGroupId", parent: name, min: 11)
            try self.validate(self.customSecurityGroupId, name: "customSecurityGroupId", parent: name, pattern: "^(sg-([0-9a-f]{8}|[0-9a-f]{17}))$")
            try self.validate(self.instanceIamRoleArn, name: "instanceIamRoleArn", parent: name, pattern: "^arn:aws[a-z-]{0,7}:[A-Za-z0-9][A-za-z0-9_/.-]{0,62}:[A-za-z0-9_/.-]{0,63}:[A-za-z0-9_/.-]{0,63}:[A-Za-z0-9][A-Za-z0-9:_/+=,@.\\\\-]{0,1023}$")
        }

        private enum CodingKeys: String, CodingKey {
            case customSecurityGroupId = "CustomSecurityGroupId"
            case defaultOu = "DefaultOu"
            case enableInternetAccess = "EnableInternetAccess"
            case enableMaintenanceMode = "EnableMaintenanceMode"
            case instanceIamRoleArn = "InstanceIamRoleArn"
            case userEnabledAsLocalAdministrator = "UserEnabledAsLocalAdministrator"
        }
    }

    public struct WorkspaceDirectory: AWSDecodableShape {
        /// Information about the Active Directory config.
        public let activeDirectoryConfig: ActiveDirectoryConfig?
        /// The directory alias.
        public let alias: String?
        /// The certificate-based authentication properties used to authenticate SAML 2.0 Identity Provider (IdP) user identities to Active Directory for WorkSpaces login.
        public let certificateBasedAuthProperties: CertificateBasedAuthProperties?
        /// The user name for the service account.
        public let customerUserName: String?
        /// The directory identifier.
        public let directoryId: String?
        /// The name of the directory.
        public let directoryName: String?
        /// The directory type.
        public let directoryType: WorkspaceDirectoryType?
        /// The IP addresses of the DNS servers for the directory.
        public let dnsIpAddresses: [String]?
        /// Endpoint encryption mode that allows you to configure the specified directory between Standard TLS and FIPS 140-2 validated mode.
        public let endpointEncryptionMode: EndpointEncryptionMode?
        /// The error message returned.
        public let errorMessage: String?
        /// The identifier of the IAM role. This is the role that allows Amazon WorkSpaces to make calls to other services, such as Amazon EC2, on your behalf.
        public let iamRoleId: String?
        /// Specifies details about identity center configurations.
        public let idcConfig: IDCConfig?
        /// The identifiers of the IP access control groups associated with the directory.
        public let ipGroupIds: [String]?
        /// Specifies details about Microsoft Entra configurations.
        public let microsoftEntraConfig: MicrosoftEntraConfig?
        /// The registration code for the directory. This is the code that users enter in their Amazon WorkSpaces client application to connect to the directory.
        public let registrationCode: String?
        /// Describes the enablement status, user access URL, and relay state parameter name that are used for configuring  federation with an SAML 2.0 identity provider.
        public let samlProperties: SamlProperties?
        /// The default self-service permissions for WorkSpaces in the directory.
        public let selfservicePermissions: SelfservicePermissions?
        /// The state of the directory's registration with Amazon WorkSpaces. After a directory is deregistered, the DEREGISTERED state is returned very briefly before the directory metadata is cleaned up, so this state is rarely returned. To confirm that a directory is deregistered, check for the directory ID by using  DescribeWorkspaceDirectories. If the directory ID isn't returned, then the directory has been successfully deregistered.
        public let state: WorkspaceDirectoryState?
        /// The streaming properties to configure.
        public let streamingProperties: StreamingProperties?
        /// The identifiers of the subnets used with the directory.
        public let subnetIds: [String]?
        /// Specifies whether the directory is dedicated or shared. To use Bring Your Own License (BYOL), this value must be set to DEDICATED. For more information, see Bring Your Own Windows Desktop Images.
        public let tenancy: Tenancy?
        /// Indicates the identity type of the specifired user.
        public let userIdentityType: UserIdentityType?
        /// The devices and operating systems that users can use to access WorkSpaces.
        public let workspaceAccessProperties: WorkspaceAccessProperties?
        /// The default creation properties for all WorkSpaces in the directory.
        public let workspaceCreationProperties: DefaultWorkspaceCreationProperties?
        /// The description of the WorkSpace directory
        public let workspaceDirectoryDescription: String?
        /// The name fo the WorkSpace directory.
        public let workspaceDirectoryName: String?
        /// The identifier of the security group that is assigned to new WorkSpaces.
        public let workspaceSecurityGroupId: String?
        /// Indicates whether the directory's WorkSpace type is personal or pools.
        public let workspaceType: WorkspaceType?

        @inlinable
        public init(activeDirectoryConfig: ActiveDirectoryConfig? = nil, alias: String? = nil, certificateBasedAuthProperties: CertificateBasedAuthProperties? = nil, customerUserName: String? = nil, directoryId: String? = nil, directoryName: String? = nil, directoryType: WorkspaceDirectoryType? = nil, dnsIpAddresses: [String]? = nil, endpointEncryptionMode: EndpointEncryptionMode? = nil, errorMessage: String? = nil, iamRoleId: String? = nil, idcConfig: IDCConfig? = nil, ipGroupIds: [String]? = nil, microsoftEntraConfig: MicrosoftEntraConfig? = nil, registrationCode: String? = nil, samlProperties: SamlProperties? = nil, selfservicePermissions: SelfservicePermissions? = nil, state: WorkspaceDirectoryState? = nil, streamingProperties: StreamingProperties? = nil, subnetIds: [String]? = nil, tenancy: Tenancy? = nil, userIdentityType: UserIdentityType? = nil, workspaceAccessProperties: WorkspaceAccessProperties? = nil, workspaceCreationProperties: DefaultWorkspaceCreationProperties? = nil, workspaceDirectoryDescription: String? = nil, workspaceDirectoryName: String? = nil, workspaceSecurityGroupId: String? = nil, workspaceType: WorkspaceType? = nil) {
            self.activeDirectoryConfig = activeDirectoryConfig
            self.alias = alias
            self.certificateBasedAuthProperties = certificateBasedAuthProperties
            self.customerUserName = customerUserName
            self.directoryId = directoryId
            self.directoryName = directoryName
            self.directoryType = directoryType
            self.dnsIpAddresses = dnsIpAddresses
            self.endpointEncryptionMode = endpointEncryptionMode
            self.errorMessage = errorMessage
            self.iamRoleId = iamRoleId
            self.idcConfig = idcConfig
            self.ipGroupIds = ipGroupIds
            self.microsoftEntraConfig = microsoftEntraConfig
            self.registrationCode = registrationCode
            self.samlProperties = samlProperties
            self.selfservicePermissions = selfservicePermissions
            self.state = state
            self.streamingProperties = streamingProperties
            self.subnetIds = subnetIds
            self.tenancy = tenancy
            self.userIdentityType = userIdentityType
            self.workspaceAccessProperties = workspaceAccessProperties
            self.workspaceCreationProperties = workspaceCreationProperties
            self.workspaceDirectoryDescription = workspaceDirectoryDescription
            self.workspaceDirectoryName = workspaceDirectoryName
            self.workspaceSecurityGroupId = workspaceSecurityGroupId
            self.workspaceType = workspaceType
        }

        private enum CodingKeys: String, CodingKey {
            case activeDirectoryConfig = "ActiveDirectoryConfig"
            case alias = "Alias"
            case certificateBasedAuthProperties = "CertificateBasedAuthProperties"
            case customerUserName = "CustomerUserName"
            case directoryId = "DirectoryId"
            case directoryName = "DirectoryName"
            case directoryType = "DirectoryType"
            case dnsIpAddresses = "DnsIpAddresses"
            case endpointEncryptionMode = "EndpointEncryptionMode"
            case errorMessage = "ErrorMessage"
            case iamRoleId = "IamRoleId"
            case idcConfig = "IDCConfig"
            case ipGroupIds = "ipGroupIds"
            case microsoftEntraConfig = "MicrosoftEntraConfig"
            case registrationCode = "RegistrationCode"
            case samlProperties = "SamlProperties"
            case selfservicePermissions = "SelfservicePermissions"
            case state = "State"
            case streamingProperties = "StreamingProperties"
            case subnetIds = "SubnetIds"
            case tenancy = "Tenancy"
            case userIdentityType = "UserIdentityType"
            case workspaceAccessProperties = "WorkspaceAccessProperties"
            case workspaceCreationProperties = "WorkspaceCreationProperties"
            case workspaceDirectoryDescription = "WorkspaceDirectoryDescription"
            case workspaceDirectoryName = "WorkspaceDirectoryName"
            case workspaceSecurityGroupId = "WorkspaceSecurityGroupId"
            case workspaceType = "WorkspaceType"
        }
    }

    public struct WorkspaceImage: AWSDecodableShape {
        /// The date when the image was created. If the image has been shared, the Amazon Web Services account that the image has been shared with sees the original creation date of the image.
        public let created: Date?
        /// The description of the image.
        public let description: String?
        /// The error code that is returned for the image.
        public let errorCode: String?
        /// Additional details of the error returned for the image, including the  possible causes of the errors and troubleshooting information.
        public let errorDetails: [ErrorDetails]?
        /// The text of the error message that is returned for the image.
        public let errorMessage: String?
        /// The identifier of the image.
        public let imageId: String?
        /// The name of the image.
        public let name: String?
        /// The operating system that the image is running.
        public let operatingSystem: OperatingSystem?
        /// The identifier of the Amazon Web Services account that owns the image.
        public let ownerAccountId: String?
        /// Specifies whether the image is running on dedicated hardware. When Bring Your Own License (BYOL) is enabled, this value is set to DEDICATED. For more information, see Bring Your Own Windows Desktop Images.
        public let requiredTenancy: WorkspaceImageRequiredTenancy?
        /// The status of the image.
        public let state: WorkspaceImageState?
        /// The updates (if any) that are available for the specified image.
        public let updates: UpdateResult?

        @inlinable
        public init(created: Date? = nil, description: String? = nil, errorCode: String? = nil, errorDetails: [ErrorDetails]? = nil, errorMessage: String? = nil, imageId: String? = nil, name: String? = nil, operatingSystem: OperatingSystem? = nil, ownerAccountId: String? = nil, requiredTenancy: WorkspaceImageRequiredTenancy? = nil, state: WorkspaceImageState? = nil, updates: UpdateResult? = nil) {
            self.created = created
            self.description = description
            self.errorCode = errorCode
            self.errorDetails = errorDetails
            self.errorMessage = errorMessage
            self.imageId = imageId
            self.name = name
            self.operatingSystem = operatingSystem
            self.ownerAccountId = ownerAccountId
            self.requiredTenancy = requiredTenancy
            self.state = state
            self.updates = updates
        }

        private enum CodingKeys: String, CodingKey {
            case created = "Created"
            case description = "Description"
            case errorCode = "ErrorCode"
            case errorDetails = "ErrorDetails"
            case errorMessage = "ErrorMessage"
            case imageId = "ImageId"
            case name = "Name"
            case operatingSystem = "OperatingSystem"
            case ownerAccountId = "OwnerAccountId"
            case requiredTenancy = "RequiredTenancy"
            case state = "State"
            case updates = "Updates"
        }
    }

    public struct WorkspaceProperties: AWSEncodableShape & AWSDecodableShape {
        /// The compute type. For more information, see Amazon WorkSpaces Bundles.
        public let computeTypeName: Compute?
        /// Indicates the Global Accelerator properties.
        public let globalAccelerator: GlobalAcceleratorForWorkSpace?
        /// The name of the operating system.
        public let operatingSystemName: OperatingSystemName?
        /// The protocol. For more information, see   Protocols for Amazon WorkSpaces.    Only available for WorkSpaces created with PCoIP bundles.   The Protocols property is case sensitive. Ensure you use PCOIP or DCV (formerly WSP).   Unavailable for Windows 7 WorkSpaces and WorkSpaces using GPU-based bundles  (Graphics, GraphicsPro, Graphics.g4dn, and GraphicsPro.g4dn).
        public let protocols: [`Protocol`]?
        /// The size of the root volume. For important information about how to modify the size of the root and user volumes, see Modify a WorkSpace.
        public let rootVolumeSizeGib: Int?
        /// The running mode. For more information, see Manage the WorkSpace Running Mode.  The MANUAL value is only supported by Amazon WorkSpaces Core. Contact your account team to be allow-listed to use this value. For more information, see Amazon WorkSpaces Core.  Review your running mode to ensure you are using one that is optimal for your needs and budget. For more information on switching running modes, see  Can I switch between hourly and monthly billing?
        public let runningMode: RunningMode?
        /// The time after a user logs off when WorkSpaces are automatically stopped. Configured in 60-minute intervals.
        public let runningModeAutoStopTimeoutInMinutes: Int?
        /// The size of the user storage. For important information about how to modify the size of the root and user volumes, see Modify a WorkSpace.
        public let userVolumeSizeGib: Int?

        @inlinable
        public init(computeTypeName: Compute? = nil, globalAccelerator: GlobalAcceleratorForWorkSpace? = nil, operatingSystemName: OperatingSystemName? = nil, protocols: [`Protocol`]? = nil, rootVolumeSizeGib: Int? = nil, runningMode: RunningMode? = nil, runningModeAutoStopTimeoutInMinutes: Int? = nil, userVolumeSizeGib: Int? = nil) {
            self.computeTypeName = computeTypeName
            self.globalAccelerator = globalAccelerator
            self.operatingSystemName = operatingSystemName
            self.protocols = protocols
            self.rootVolumeSizeGib = rootVolumeSizeGib
            self.runningMode = runningMode
            self.runningModeAutoStopTimeoutInMinutes = runningModeAutoStopTimeoutInMinutes
            self.userVolumeSizeGib = userVolumeSizeGib
        }

        private enum CodingKeys: String, CodingKey {
            case computeTypeName = "ComputeTypeName"
            case globalAccelerator = "GlobalAccelerator"
            case operatingSystemName = "OperatingSystemName"
            case protocols = "Protocols"
            case rootVolumeSizeGib = "RootVolumeSizeGib"
            case runningMode = "RunningMode"
            case runningModeAutoStopTimeoutInMinutes = "RunningModeAutoStopTimeoutInMinutes"
            case userVolumeSizeGib = "UserVolumeSizeGib"
        }
    }

    public struct WorkspaceRequest: AWSEncodableShape & AWSDecodableShape {
        /// The identifier of the bundle for the WorkSpace. You can use DescribeWorkspaceBundles to list the available bundles.
        public let bundleId: String
        /// The identifier of the Directory Service directory for the WorkSpace. You can use DescribeWorkspaceDirectories to list the available directories.
        public let directoryId: String
        /// Indicates whether the data stored on the root volume is encrypted.
        public let rootVolumeEncryptionEnabled: Bool?
        /// The tags for the WorkSpace.
        public let tags: [Tag]?
        /// The user name of the user for the WorkSpace. This user name must exist in the Directory Service directory for the WorkSpace. The username is not case-sensitive, but we recommend matching the case in the Directory Service directory to avoid potential incompatibilities. The reserved keyword, [UNDEFINED], is used when creating user-decoupled WorkSpaces.
        public let userName: String
        /// Indicates whether the data stored on the user volume is encrypted.
        public let userVolumeEncryptionEnabled: Bool?
        /// The ARN of the symmetric KMS key used to encrypt data stored on your WorkSpace. Amazon WorkSpaces does not support asymmetric KMS keys.
        public let volumeEncryptionKey: String?
        /// The name of the user-decoupled WorkSpace.   WorkspaceName is required if UserName is [UNDEFINED] for user-decoupled WorkSpaces. WorkspaceName is not applicable if UserName is specified for user-assigned WorkSpaces.
        public let workspaceName: String?
        /// The WorkSpace properties.
        public let workspaceProperties: WorkspaceProperties?

        @inlinable
        public init(bundleId: String, directoryId: String, rootVolumeEncryptionEnabled: Bool? = nil, tags: [Tag]? = nil, userName: String, userVolumeEncryptionEnabled: Bool? = nil, volumeEncryptionKey: String? = nil, workspaceName: String? = nil, workspaceProperties: WorkspaceProperties? = nil) {
            self.bundleId = bundleId
            self.directoryId = directoryId
            self.rootVolumeEncryptionEnabled = rootVolumeEncryptionEnabled
            self.tags = tags
            self.userName = userName
            self.userVolumeEncryptionEnabled = userVolumeEncryptionEnabled
            self.volumeEncryptionKey = volumeEncryptionKey
            self.workspaceName = workspaceName
            self.workspaceProperties = workspaceProperties
        }

        public func validate(name: String) throws {
            try self.validate(self.bundleId, name: "bundleId", parent: name, pattern: "^wsb-[0-9a-z]{8,63}$")
            try self.validate(self.directoryId, name: "directoryId", parent: name, max: 65)
            try self.validate(self.directoryId, name: "directoryId", parent: name, min: 10)
            try self.validate(self.directoryId, name: "directoryId", parent: name, pattern: "^(d-[0-9a-f]{8,63}$)|(wsd-[0-9a-z]{8,63}$)$")
            try self.tags?.forEach {
                try $0.validate(name: "\(name).tags[]")
            }
            try self.validate(self.userName, name: "userName", parent: name, max: 63)
            try self.validate(self.userName, name: "userName", parent: name, min: 1)
            try self.validate(self.workspaceName, name: "workspaceName", parent: name, pattern: "^[a-zA-Z0-9_()][a-zA-Z0-9_.()-]{1,63}$")
        }

        private enum CodingKeys: String, CodingKey {
            case bundleId = "BundleId"
            case directoryId = "DirectoryId"
            case rootVolumeEncryptionEnabled = "RootVolumeEncryptionEnabled"
            case tags = "Tags"
            case userName = "UserName"
            case userVolumeEncryptionEnabled = "UserVolumeEncryptionEnabled"
            case volumeEncryptionKey = "VolumeEncryptionKey"
            case workspaceName = "WorkspaceName"
            case workspaceProperties = "WorkspaceProperties"
        }
    }

    public struct WorkspaceResourceAssociation: AWSDecodableShape {
        /// The identifier of the associated resource.
        public let associatedResourceId: String?
        /// The resource types of the associated resource.
        public let associatedResourceType: WorkSpaceAssociatedResourceType?
        /// The time the association is created.
        public let created: Date?
        /// The time the association status was last updated.
        public let lastUpdatedTime: Date?
        /// The status of the WorkSpace resource association.
        public let state: AssociationState?
        /// The reason the association deployment failed.
        public let stateReason: AssociationStateReason?
        /// The identifier of the WorkSpace.
        public let workspaceId: String?

        @inlinable
        public init(associatedResourceId: String? = nil, associatedResourceType: WorkSpaceAssociatedResourceType? = nil, created: Date? = nil, lastUpdatedTime: Date? = nil, state: AssociationState? = nil, stateReason: AssociationStateReason? = nil, workspaceId: String? = nil) {
            self.associatedResourceId = associatedResourceId
            self.associatedResourceType = associatedResourceType
            self.created = created
            self.lastUpdatedTime = lastUpdatedTime
            self.state = state
            self.stateReason = stateReason
            self.workspaceId = workspaceId
        }

        private enum CodingKeys: String, CodingKey {
            case associatedResourceId = "AssociatedResourceId"
            case associatedResourceType = "AssociatedResourceType"
            case created = "Created"
            case lastUpdatedTime = "LastUpdatedTime"
            case state = "State"
            case stateReason = "StateReason"
            case workspaceId = "WorkspaceId"
        }
    }

    public struct WorkspacesIpGroup: AWSDecodableShape {
        /// The description of the group.
        public let groupDesc: String?
        /// The identifier of the group.
        public let groupId: String?
        /// The name of the group.
        public let groupName: String?
        /// The rules.
        public let userRules: [IpRuleItem]?

        @inlinable
        public init(groupDesc: String? = nil, groupId: String? = nil, groupName: String? = nil, userRules: [IpRuleItem]? = nil) {
            self.groupDesc = groupDesc
            self.groupId = groupId
            self.groupName = groupName
            self.userRules = userRules
        }

        private enum CodingKeys: String, CodingKey {
            case groupDesc = "groupDesc"
            case groupId = "groupId"
            case groupName = "groupName"
            case userRules = "userRules"
        }
    }

    public struct WorkspacesPool: AWSDecodableShape {
        /// The persistent application settings for users of the pool.
        public let applicationSettings: ApplicationSettingsResponse?
        /// The identifier of the bundle used by the pool.
        public let bundleId: String
        /// The capacity status for the pool
        public let capacityStatus: CapacityStatus
        /// The time the pool was created.
        public let createdAt: Date
        /// The description of the pool.
        public let description: String?
        /// The identifier of the directory used by the pool.
        public let directoryId: String
        /// The pool errors.
        public let errors: [WorkspacesPoolError]?
        /// The Amazon Resource Name (ARN) for the pool.
        public let poolArn: String
        /// The identifier of a pool.
        public let poolId: String
        /// The name of the pool.
        public let poolName: String
        /// The running mode of the pool.
        public let runningMode: PoolsRunningMode
        /// The current state of the pool.
        public let state: WorkspacesPoolState
        /// The amount of time that a pool session remains active after users disconnect.  If they try to reconnect to the pool session after a disconnection or network interruption  within this time interval, they are connected to their previous session.  Otherwise, they are connected to a new session with a new pool instance.
        public let timeoutSettings: TimeoutSettings?

        @inlinable
        public init(applicationSettings: ApplicationSettingsResponse? = nil, bundleId: String, capacityStatus: CapacityStatus, createdAt: Date, description: String? = nil, directoryId: String, errors: [WorkspacesPoolError]? = nil, poolArn: String, poolId: String, poolName: String, runningMode: PoolsRunningMode, state: WorkspacesPoolState, timeoutSettings: TimeoutSettings? = nil) {
            self.applicationSettings = applicationSettings
            self.bundleId = bundleId
            self.capacityStatus = capacityStatus
            self.createdAt = createdAt
            self.description = description
            self.directoryId = directoryId
            self.errors = errors
            self.poolArn = poolArn
            self.poolId = poolId
            self.poolName = poolName
            self.runningMode = runningMode
            self.state = state
            self.timeoutSettings = timeoutSettings
        }

        private enum CodingKeys: String, CodingKey {
            case applicationSettings = "ApplicationSettings"
            case bundleId = "BundleId"
            case capacityStatus = "CapacityStatus"
            case createdAt = "CreatedAt"
            case description = "Description"
            case directoryId = "DirectoryId"
            case errors = "Errors"
            case poolArn = "PoolArn"
            case poolId = "PoolId"
            case poolName = "PoolName"
            case runningMode = "RunningMode"
            case state = "State"
            case timeoutSettings = "TimeoutSettings"
        }
    }

    public struct WorkspacesPoolError: AWSDecodableShape {
        /// The error code.
        public let errorCode: WorkspacesPoolErrorCode?
        /// The error message.
        public let errorMessage: String?

        @inlinable
        public init(errorCode: WorkspacesPoolErrorCode? = nil, errorMessage: String? = nil) {
            self.errorCode = errorCode
            self.errorMessage = errorMessage
        }

        private enum CodingKeys: String, CodingKey {
            case errorCode = "ErrorCode"
            case errorMessage = "ErrorMessage"
        }
    }

    public struct WorkspacesPoolSession: AWSDecodableShape {
        /// The authentication method. The user is authenticated using a  WorkSpaces Pools URL (API) or SAML 2.0 federation (SAML).
        public let authenticationType: AuthenticationType?
        /// Specifies whether a user is connected to the pool session.
        public let connectionState: SessionConnectionState?
        /// The time that the pool session ended.
        public let expirationTime: Date?
        /// The identifier for the instance hosting the session.
        public let instanceId: String?
        /// Describes the network details of the pool.
        public let networkAccessConfiguration: NetworkAccessConfiguration?
        /// The identifier of the pool.
        public let poolId: String
        /// The identifier of the session.
        public let sessionId: String
        /// The time that the pool sission started.
        public let startTime: Date?
        /// The identifier of the user.
        public let userId: String

        @inlinable
        public init(authenticationType: AuthenticationType? = nil, connectionState: SessionConnectionState? = nil, expirationTime: Date? = nil, instanceId: String? = nil, networkAccessConfiguration: NetworkAccessConfiguration? = nil, poolId: String, sessionId: String, startTime: Date? = nil, userId: String) {
            self.authenticationType = authenticationType
            self.connectionState = connectionState
            self.expirationTime = expirationTime
            self.instanceId = instanceId
            self.networkAccessConfiguration = networkAccessConfiguration
            self.poolId = poolId
            self.sessionId = sessionId
            self.startTime = startTime
            self.userId = userId
        }

        private enum CodingKeys: String, CodingKey {
            case authenticationType = "AuthenticationType"
            case connectionState = "ConnectionState"
            case expirationTime = "ExpirationTime"
            case instanceId = "InstanceId"
            case networkAccessConfiguration = "NetworkAccessConfiguration"
            case poolId = "PoolId"
            case sessionId = "SessionId"
            case startTime = "StartTime"
            case userId = "UserId"
        }
    }
}

// MARK: - Errors

/// Error enum for WorkSpaces
public struct WorkSpacesErrorType: AWSErrorType {
    enum Code: String {
        case accessDeniedException = "AccessDeniedException"
        case applicationNotSupportedException = "ApplicationNotSupportedException"
        case computeNotCompatibleException = "ComputeNotCompatibleException"
        case conflictException = "ConflictException"
        case incompatibleApplicationsException = "IncompatibleApplicationsException"
        case internalServerException = "InternalServerException"
        case invalidParameterCombinationException = "InvalidParameterCombinationException"
        case invalidParameterValuesException = "InvalidParameterValuesException"
        case invalidResourceStateException = "InvalidResourceStateException"
        case operatingSystemNotCompatibleException = "OperatingSystemNotCompatibleException"
        case operationInProgressException = "OperationInProgressException"
        case operationNotSupportedException = "OperationNotSupportedException"
        case resourceAlreadyExistsException = "ResourceAlreadyExistsException"
        case resourceAssociatedException = "ResourceAssociatedException"
        case resourceCreationFailedException = "ResourceCreationFailedException"
        case resourceInUseException = "ResourceInUseException"
        case resourceLimitExceededException = "ResourceLimitExceededException"
        case resourceNotFoundException = "ResourceNotFoundException"
        case resourceUnavailableException = "ResourceUnavailableException"
        case unsupportedNetworkConfigurationException = "UnsupportedNetworkConfigurationException"
        case unsupportedWorkspaceConfigurationException = "UnsupportedWorkspaceConfigurationException"
        case validationException = "ValidationException"
        case workspacesDefaultRoleNotFoundException = "WorkspacesDefaultRoleNotFoundException"
    }

    private let error: Code
    public let context: AWSErrorContext?

    /// initialize WorkSpaces
    public init?(errorCode: String, context: AWSErrorContext) {
        guard let error = Code(rawValue: errorCode) else { return nil }
        self.error = error
        self.context = context
    }

    internal init(_ error: Code) {
        self.error = error
        self.context = nil
    }

    /// return error code string
    public var errorCode: String { self.error.rawValue }

    /// The user is not authorized to access a resource.
    public static var accessDeniedException: Self { .init(.accessDeniedException) }
    /// The specified application is not supported.
    public static var applicationNotSupportedException: Self { .init(.applicationNotSupportedException) }
    /// The compute type of the WorkSpace is not compatible with the application.
    public static var computeNotCompatibleException: Self { .init(.computeNotCompatibleException) }
    /// The TargetAccountId is already linked or invited.
    public static var conflictException: Self { .init(.conflictException) }
    /// The specified application is not compatible with the resource.
    public static var incompatibleApplicationsException: Self { .init(.incompatibleApplicationsException) }
    /// Unexpected server error occured.
    public static var internalServerException: Self { .init(.internalServerException) }
    /// Two or more of the selected parameter values cannot be used together.
    public static var invalidParameterCombinationException: Self { .init(.invalidParameterCombinationException) }
    /// One or more parameter values are not valid.
    public static var invalidParameterValuesException: Self { .init(.invalidParameterValuesException) }
    /// The state of the resource is not valid for this operation.
    public static var invalidResourceStateException: Self { .init(.invalidResourceStateException) }
    /// The operating system of the WorkSpace is not compatible with the application.
    public static var operatingSystemNotCompatibleException: Self { .init(.operatingSystemNotCompatibleException) }
    /// The properties of this WorkSpace are currently being modified. Try again in a moment.
    public static var operationInProgressException: Self { .init(.operationInProgressException) }
    /// This operation is not supported.
    public static var operationNotSupportedException: Self { .init(.operationNotSupportedException) }
    /// The specified resource already exists.
    public static var resourceAlreadyExistsException: Self { .init(.resourceAlreadyExistsException) }
    /// The resource is associated with a directory.
    public static var resourceAssociatedException: Self { .init(.resourceAssociatedException) }
    /// The resource could not be created.
    public static var resourceCreationFailedException: Self { .init(.resourceCreationFailedException) }
    /// The specified resource is currently in use.
    public static var resourceInUseException: Self { .init(.resourceInUseException) }
    /// Your resource limits have been exceeded.
    public static var resourceLimitExceededException: Self { .init(.resourceLimitExceededException) }
    /// The resource could not be found.
    public static var resourceNotFoundException: Self { .init(.resourceNotFoundException) }
    /// The specified resource is not available.
    public static var resourceUnavailableException: Self { .init(.resourceUnavailableException) }
    /// The configuration of this network is not supported for this operation, or your network configuration  conflicts with the Amazon WorkSpaces management network IP range. For more information, see   Configure a VPC for Amazon WorkSpaces.
    public static var unsupportedNetworkConfigurationException: Self { .init(.unsupportedNetworkConfigurationException) }
    /// The configuration of this WorkSpace is not supported for this operation. For more information, see   Required  Configuration and Service Components for WorkSpaces .
    public static var unsupportedWorkspaceConfigurationException: Self { .init(.unsupportedWorkspaceConfigurationException) }
    /// You either haven't provided a TargetAccountId or  are using the same value for TargetAccountId and SourceAccountId.
    public static var validationException: Self { .init(.validationException) }
    /// The workspaces_DefaultRole role could not be found. If this is the first time you are registering a directory, you will need to create the workspaces_DefaultRole role before you can register a directory. For more information, see Creating the workspaces_DefaultRole Role.
    public static var workspacesDefaultRoleNotFoundException: Self { .init(.workspacesDefaultRoleNotFoundException) }
}

extension WorkSpacesErrorType: AWSServiceErrorType {
    public static let errorCodeMap: [String: AWSErrorShape.Type] = [
        "OperationNotSupportedException": WorkSpaces.OperationNotSupportedException.self,
        "ResourceInUseException": WorkSpaces.ResourceInUseException.self,
        "ResourceNotFoundException": WorkSpaces.ResourceNotFoundException.self,
        "ResourceUnavailableException": WorkSpaces.ResourceUnavailableException.self
    ]
}

extension WorkSpacesErrorType: Equatable {
    public static func == (lhs: WorkSpacesErrorType, rhs: WorkSpacesErrorType) -> Bool {
        lhs.error == rhs.error
    }
}

extension WorkSpacesErrorType: CustomStringConvertible {
    public var description: String {
        return "\(self.error.rawValue): \(self.message ?? "")"
    }
}
